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

\a前にawkを試してください$。例:

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"

関連情報