Nic nie przesyłam do xargs

14

Mam skrypt, który w niektórych okolicznościach może nie mieć nic na stdout. Na końcu skryptu przekazuję wiersze, które mam, do innego polecenia za pomocą xargs. Mój problem polega na tym, że gdy nie ma nic na stdout, pojawia się typowy komunikat o błędzie „Użycie: program arg1 arg2”.

Jak mogę tego uniknąć?

Richard
źródło
8
Przenieś swój „EDYCJA” w odpowiedzi i zaakceptuj własną odpowiedź. W ten sposób twoje odkrycia będą przydatne dla innych osób. meta.unix.stackexchange.com/questions/809/…
andcoz
1
Nie miał wtedy wystarczającej liczby punktów. Zrobię to teraz.
Richard,

Odpowiedzi:

13

Potrzebujesz opcji -rlub --no-run-if-empty.

Pamiętaj, że tego konkretnego zachowania trudno jest dokonać na wielu platformach. Domyślnie xargsuruchamiane są wersje BSD -r. Wersja GNU tego potrzebuje. Wersja FreeBSD flag xargsignoruje -rflagę dla zgodności z GNU. Wersja systemu Mac OS X nawet nie akceptuje flagi i zgłasza błąd illegal option.

Następnie możesz wybrać opcję wykrywania systemu operacyjnego w $OSTYPEcelu napisania skryptu międzyplatformowego. Co więcej, spróbuj wykryć zachowanie xargssamego siebie. Uruchom go, -ra jeśli to się nie powiedzie (kod stanu> 0), uruchom go bez -r.

Denis
źródło
3

Lekcja, dlaczego powinieneś czytać strony podręcznika…

-rLub --no-run-if-emptyflagi są przyjacielu.

Richard
źródło