for 循环内的 xargs

for 循环内的 xargs

我们已经弄清楚了大部分内容,但接下来会发生什么。

for i in $(arp |sort |awk '{print $1}'|grep IPADDRESS)
do
ssh USERNAME@$i "ps -ef |grep X11|grep -v grep |awk '{print $2}'|xargs kill"
done

kill: USERNAME: invalid process id

我已经使用循环中使用的用户名进行了 SSH,并且运行得ps -ef | grep X11| grep -v grep | awk '{print $2}'| xargs kill很好,但看起来 xargs 正在获取用户名而不是正在打印的用户名。

有什么想法吗?

答案1

尝试awk\前面的a $。例子:

ssh USERNAME@$i "ps -ef |grep X11|grep -v grep |awk '{print \$2}'|xargs kill"

答案2

你可以使用 pkill 代替,不需要那么多管道

ssh USERNAME@$i "pkill -f X11"

或者如果你更喜欢 ps -ef,

ssh USERNAME@$i "ps -ef |grep [X]11 |awk '{print \$2}'|xargs kill"

或者

ssh USERNAME@$i "ps -ef | awk '/[X]11/ {print \$2}'|xargs kill"

相关内容