$ 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;
所有工作都完美
$ ssh root@123.123.123.123 "pkill -f "\""stalled process name"\"";"\
> "commands_to_restart; some_more_commands;";
没有输出,没有。
$ 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;
所以...报价转发的两个阶段按预期工作......
如何使用单层报价转义才能使用ssh / bash?
由于引用在两个层中完美地工作,我感觉它与引用关系较少,而更多地与ssh
处理终端的某些方面有关。然而,据我所知,除了简单和常规的IO标准输出和没有输入之外,命令什么都不做。
答案 0 :(得分:4)
最好使用heredoc来做这些事情:
ssh root@123.123.123.123 bash -s << 'EOF'
pkill -f "stalled process name"
commands_to_restart
some_more_commands
EOF
bash -s
确保您使用bash而不是远程主机上的特定于用户的shell 'EOF'
)可确保内容按原样传递,而父shell不会解释它答案 1 :(得分:1)
尝试:
ssh root@123.123.123.123 'pkill -f "stalled process name"; commands_to_restart; some_more_commands'
使用单引号中的命令,不需要转义内部双引号。
如果您只想使用双引号,那么内部双引号的单一转义应该是令人满意的:
ssh root@123.123.123.123 "pkill -f \"stalled process name\"; commands_to_restart; some_more_commands"