还有两个选项我在其他答案中都没有提到。为了演示的目的,我保留了grep/grep/awk/head管道的完整性(如
rici's answer
)它可以简化为
awk -F ' ' '/MapReduceNod[e]/ {print $2; exit}'
-
对整个ssh命令使用双引号:
ssh deploy@hera "kill -9 \$(ps -ef |
grep MapReduceNode | grep -v \"grep\" | awk -F ' ' '{print \$2}' | head -n 1)"
请注意,我现在可以在命令中使用单引号,但我必须避开其他尚未展开的内容:
\$()
(我用它代替了反勾号),双引号
\"
和
print \$2
.
-
带引号分隔符的here文档:
ssh -T deploy@hera <<'EOF'
kill -9 $(ps -ef | grep MapReduceNode | grep -v 'grep' |
awk -F ' ' '{print $2}' | head -n 1)
EOF
这个
-T
防止ssh抱怨没有分配伪终端。
带引号分隔符的here文档是非常好的,因为它的内容根本不需要对转义内容进行修改,
和
它可以包含单引号。