我经常最终通过 ssh 发出复杂的命令;这些命令涉及到 awk 或 perl 一行的管道,因此包含单引号和 $。我既无法找出正确执行引用的硬性规则,也没有找到很好的参考。例如,请考虑以下事项:
# what I'd run locally:
CMD='pgrep -fl java | grep -i datanode | awk '{print $1}'
# this works with ssh $host "$CMD":
CMD='pgrep -fl java | grep -i datanode | awk '"'"'{print $1}'"'"
Run Code Online (Sandbox Code Playgroud)
(注意 awk 语句中的额外引号。)
但是我如何让它与它一起工作,例如ssh $host "sudo su user -c '$CMD'"
?在这种情况下是否有管理报价的通用方法?..
考虑以下输入进行排序:
cat > foo <<EOM
D,,5014978
DD,,25
D,I,1972765530
D,Y,4223624
-,Y,71285059
YA,I,2
EOM
Run Code Online (Sandbox Code Playgroud)
现在尝试运行 sort foo
在我的任何 linux 机器(gnu coreutils 版本 6.9-7.4)上尝试此操作时,输出未排序。在 cygwin (gnu coretuils 8.5) 下运行时,输出已排序。注释?