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"

관련 정보