У меня есть сценарий, который может в некоторых случаях не иметь ничего на стандартный вывод. В конце сценария я передаю нужные мне строки другой команде, используя xargs. Моя проблема в том, что когда на stdout ничего нет, я получаю типичное сообщение об ошибке «Использование: программа arg1 arg2».
Как я могу избежать этого?
Ответы:
Вам нужен
-r
или--no-run-if-empty
варианты.Имейте в виду, что это конкретное поведение трудно сделать кросс-платформенным. Версии BSD
xargs
работают с-r
по умолчанию. Версия GNU нуждается в этом. FreeBSD версияxargs
игнорирует-r
флаг совместимости с GNU. Версия для Mac OS X даже не принимает флаг и выдает ошибкуillegal option
.Затем вы можете использовать обнаружение ОС на основе
$OSTYPE
написания кроссплатформенного скрипта. Еще лучше, попытайтесь обнаружить поведениеxargs
себя. Запустите его,-r
а если это не удастся (код состояния> 0), запустите его без-r
.источник
Урок того, почему вы должны читать страницы руководства ...
-r
Или--no-run-if-empty
флаги друг мой.источник