use*_*098 2 ssh bash escaping heredoc quoting
$ ssh root@123.123.123.123
123.123.123.123# pkill -f "stalled process name"; commands_to_restart; some_more_commands;
many many lines of output demonstrating success
123.123.123.123# exit;
Run Code Online (Sandbox Code Playgroud)
一切正常
$ ssh root@123.123.123.123 "pkill -f "\""stalled process name"\"";"\
> "commands_to_restart; some_more_commands;";
Run Code Online (Sandbox Code Playgroud)
没有输出,什么都不做。
$ ssh root@123.123.123.123 "echo "\""pkill -f "\"\\\"\""stalled process name"\"\\\"\""; "\
> "commands_to_restart; some_more_commands;"\"";";
pkill -f "stalled process name"; commands_to_restart; some_more_commands;
Run Code Online (Sandbox Code Playgroud)
所以......报价转义的两个阶段按预期工作......
如何获得单层引号转义以使用 ssh/bash?由于引用在两层中完美运行,我觉得它与引用的关系不大,而与ssh终端处理的某些方面有关。然而,据我所知,这些命令只对标准输出进行简单和常规的 IO 操作,没有输入。
你最好使用 heredoc 来处理这些事情:
ssh root@123.123.123.123 bash -s << 'EOF'
pkill -f "stalled process name"
commands_to_restart
some_more_commands
EOF
Run Code Online (Sandbox Code Playgroud)
bash -s 确保您使用的是 bash 而不是远程主机上的特定于用户的 shell'EOF') 确保内容按原样传递,而没有父 shell 对其进行解释