我正在构建一小组脚本来远程启动,停止和检查进程的状态.在stop这些脚本应该寻找一个过程,并杀死它.因此,我做:
ssh deploy@hera 'kill -9 `ps -ef | grep MapReduceNode | grep -v "grep" | awk -F " " '{print $2}' | head -n 1`'
Run Code Online (Sandbox Code Playgroud)
这里的问题是awk标记化步骤需要单引号,并且这些单引号与用于通过ssh执行远程命令的单引号冲突.这些单引号如何被转义?
$ 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 操作,没有输入。