/ / Zapobieganie próbie uruchomienia pustego polecenia xargs przez POSIX - shell, posix, kill, xargs

Zapobieganie uruchamianiu przez POSIX xargs pustego polecenia - powłoki, posix, kill, xargs

Nie jestem zbyt dobry w bash, ale próbuję utworzyć skrypt, aby zabić niektóre procesy Java:

/usr/ucb/ps -auxww    
| grep "XUnit"      
| grep -v "grep"    
| cut -c -2000      
| awk "{print $2;}" 
| xargs kill

cut jest tu używany, ponieważ awk może zawieść z nadmiernie długimi liniami (patrz odniesienia do LINE_MAX limit w Specyfikacja POSIX dla awk).

Problem występuje, gdy nie ma takich procesów - xargs próbuje uciekać kill bez argumentów, co powoduje błąd.

Moje xargs nie akceptuje -r lub --no-run-if-empty argumenty, jak sugerowano w odpowiedziach na powiązane pytanie, które nie określa zgodności z POSIX.

Odpowiedzi:

4 dla odpowiedzi № 1

Odnosząc się konkretnie do omawianego pytania, ignorując, czy dane podejście jest rzeczywiście właściwym sposobem na zabicie procesu:

xargs sh -c "[ $# -gt 0 ] && exec "$0" "$@"" kill

Takie podejście ma xargs uruchom powłokę, która sprawdza długość listy argumentów (która będzie równa 0, jeśli tylko kill jest przekazywany jako argumenty następujące -c "script" zacząć od $0, nieuwzględnione w $# liczyć); ta powłoka uruchamia podane polecenie tylko wtedy, gdy podano co najmniej jeden argument.