我正在构建一小组用于远程启动、停止和检查进程状态的脚本。这些脚本的 stop
应该查找进程并终止它。因此我这样做:
ssh deploy@hera 'kill -9 `ps -ef | grep MapReduceNode | grep -v "grep" | awk -F " " '{print $2}' | head -n 1`'
这里的问题是 awk 标记化步骤需要单引号,并且这些与用于通过 ssh 执行远程命令的单引号发生冲突。如何转义这些单引号?
最佳答案
使用
ssh deploy@hera 'kill -9 `ps -ef | grep MapReduceNode | grep -v "grep" | awk -F " " '"'"'{print $2}'"'"' | head -n 1`'
说明:
ssh deploy@hera 'kill -9 `ps -ef | grep MapReduceNode | grep -v "grep" | awk -F " " '"'"'{print $2}'"'"' | head -n 1`'
> 1 <>2<> 3 <>4<> 5 <
1) 以命令开头的第一个字符串:'kill -9 `ps -ef | grep MapReduceNode | grep MapReduceNode | grep MapReduceNode grep -v“grep”| awk -F“”'
2) 仅包含一个 ' 字符的第二个字符串:"'"
3) 带有打印命令的第三个字符串:'{print $2}'
4) 第四个字符串带有另一个单引号:"'"
5) 第五个字符串以及命令的其余部分:' |头-n 1`'
关于bash - 如何转义 ssh/remote bash 命令中的单引号字符?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53113296/