我正在运行一个可以在多个主机上分配进程的命令。下面是命令:
execAll -m "$HOSTS" 'hostname; ps -ef | grep build | grep -v grep; ipcs | grep 666'
我现在想ipcs | grep 666
将命令的一部分传递给awk '{print $2}'
,然后kill -9
杀死所有活动进程。以下是我尝试的方法:
execAll -m "$HOSTS" 'hostname; ps -ef | grep build | grep -v grep; ipcs | grep 666 | awk '{print $2}' | xargs kill -9'
但是,awk
需要单引号来运行其参数,并且上面的命令也需要单引号。我遇到的错误是Missing }.
,我将其归因于上述引用问题。
awk
在上述情况下,我如何成功运行并终止进程?
但是,
awk
需要单引号来运行其参数,[...]
并不真地。引号只是一个shell构造,它们告诉shell不要扩展美元符号,不要将字符串保持在一个片断中,而不能在空格上打断它。awk看到的只是字符串{print $2}
,它不知道它是如何生成的。您可以使用双引号和反斜杠转义来达到相同的效果。所有这些都应该是相同的:
awk '{print $2}'
awk "{print \$2}"
awk {print\ \$2}
后两个适合放在单引号字符串中,没有问题。
或者,如果您的外壳是Bash或其他支持ANSI C引号$'..'
的外壳$'..'
,则可以将外部引号更改为,然后也使用反斜杠转义单引号:
echo $'do or don\'t'
顾名思义,其他C风格的逃逸(例如\n
,\t
,\"
,\'
,\\
)内工作$'..'
过。
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句