我正在运行一个命令来驱散多个主机上的进程。以下是命令:
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并终止进程?
发布于 2019-07-03 16:13:02
但是,
awk需要单引号来运行它的参数,
不怎么有意思。这些引号只是一个shell结构,它们告诉shell不要展开美元符号,而是将字符串保持在一起,而不是在空格上断开。awk看到的只是字符串{print $2},它不知道它是如何生成的。你可以用双引号和反斜杠转义来达到同样的效果.所有这些都应是相同的:
awk '{print $2}'
awk "{print \$2}"
awk {print\ \$2}后两者适合在单引号字符串内,没有问题。
或者,如果您的shell是Bash或其他支持ANSI引用的,则可以将外部引号更改为,然后用反斜杠转义单引号:
echo 顾名思义,其他C风格的转义(例如\n、\t、\"、\'、\\)也在中工作。..',则可以将外部引号更改为D6,然后用反斜杠转义单引号:A7顾名思义,其他C风格的转义(例如D8、D9、D10、D11、D12)也在D13中工作。..',然后用反斜杠转义单引号:A7顾名思义,其他C风格的转义(例如D8、D9、D10、D11、D12)也在D13中工作。..',则可以将外部引号更改为D6,然后用反斜杠转义单引号:A7顾名思义,其他C风格的转义(例如D8、D9、D10、D11、D12)也在D13中工作。do or don\'t'顾名思义,其他C风格的转义(例如D8、D9、D10、D11、D12)也在D13中工作。
..',则可以将外部引号更改为D6,然后用反斜杠转义单引号:A7
顾名思义,其他C风格的转义(例如D8、D9、D10、D11、D12)也在D13中工作。
..',然后用反斜杠转义单引号:A7
顾名思义,其他C风格的转义(例如D8、D9、D10、D11、D12)也在D13中工作。
..',则可以将外部引号更改为D6,然后用反斜杠转义单引号:A7
顾名思义,其他C风格的转义(例如D8、D9、D10、D11、D12)也在D13中工作。
..'中工作。..',则可以将外部引号更改为D6,然后用反斜杠转义单引号:A7
顾名思义,其他C风格的转义(例如D8、D9、D10、D11、D12)也在D13中工作。
..',然后用反斜杠转义单引号:A7
顾名思义,其他C风格的转义(例如D8、D9、D10、D11、D12)也在D13中工作。
..',则可以将外部引号更改为D6,然后用反斜杠转义单引号:A7
顾名思义,其他C风格的转义(例如D8、D9、D10、D11、D12)也在D13中工作。
do or don\'t'
顾名思义,其他C风格的转义(例如D8、D9、D10、D11、D12)也在D13中工作。
..',则可以将外部引号更改为D6,然后用反斜杠转义单引号:A7
顾名思义,其他C风格的转义(例如D8、D9、D10、D11、D12)也在D13中工作。
..',然后用反斜杠转义单引号:A7
顾名思义,其他C风格的转义(例如D8、D9、D10、D11、D12)也在D13中工作。
..',则可以将外部引号更改为D6,然后用反斜杠转义单引号:A7
顾名思义,其他C风格的转义(例如D8、D9、D10、D11、D12)也在D13中工作。
发布于 2019-07-03 16:12:33
Awk本身并不“需要”单引号。您只需要确保脚本主体包含您希望它包含的内容。如果您转义$,就会发现双引号:
execAll ... '...; ipcs | awk "/666/ {print \$2}" | xargs ...'https://unix.stackexchange.com/questions/528238
复制相似问题