Если у Вас только нет маленького небольшого количества систем, Вы задаете неправильный вопрос. Ответ не должен выполнить useradd вообще, но вместо этого оставить эту работу решению для управления конфигурацией как марионетка или шеф-повар. Это будет позволять Вашим пользовательским определениям быть централизованными и препятствовать тому, чтобы Вы работали за циклами и использовали ssh с пользователями root, для конфигурирования систем. У Вас всегда будут системы в известном состоянии конфигурации.
Документация для марионетки доступна по http://docs.puppetlabs.com
Как пример в марионетке:
user { "bob" :
password => "$1$yv3n066X$Vpb05Ac/fHTicNdT9T5vz1", # generated with `openssl passwd -1`
ensure => present, # ensure => absent to remove
managehome => true,
}
Вам нужно -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
флаги являются моим другом.