Трубить нечего xargs

14

У меня есть сценарий, который может в некоторых случаях не иметь ничего на стандартный вывод. В конце сценария я передаю нужные мне строки другой команде, используя xargs. Моя проблема в том, что когда на stdout ничего нет, я получаю типичное сообщение об ошибке «Использование: программа arg1 arg2».

Как я могу избежать этого?

Ричард
источник
8
Переместите «РЕДАКТИРОВАТЬ» в ответ и примите свой собственный ответ. Таким образом, ваши открытия будут полезны для других людей. meta.unix.stackexchange.com/questions/809/…
andcoz
1
Не было достаточно очков в то время. Сделаем это сейчас.
Ричард

Ответы:

13

Вам нужен -rили --no-run-if-emptyварианты.

Имейте в виду, что это конкретное поведение трудно сделать кросс-платформенным. Версии BSD xargsработают с -rпо умолчанию. Версия GNU нуждается в этом. FreeBSD версия xargsигнорирует -rфлаг совместимости с GNU. Версия для Mac OS X даже не принимает флаг и выдает ошибку illegal option.

Затем вы можете использовать обнаружение ОС на основе $OSTYPEнаписания кроссплатформенного скрипта. Еще лучше, попытайтесь обнаружить поведение xargsсебя. Запустите его, -rа если это не удастся (код состояния> 0), запустите его без -r.

Денис
источник
3

Урок того, почему вы должны читать страницы руководства ...

-rИли --no-run-if-emptyфлаги друг мой.

Ричард
источник