Это просто означает, что эта команда завершилась со статусом 1:
/bin/sh -c '[ "$CONFIGURE_INTERFACES" != "no" ] && [ -n "$(ifquery --read-environment --list --exclude=lo)" ] && udevadm settle'
Он мог выйти со статусом 1, если:
CONFIGURE_INTERFACES=no
установлено (в вашем /etc/default/networking ); или ifquery --read-environment --list --exclude=lo
возвращает пустое значение; или udevadm settle
выход 1 Первые две на самом деле не являются ошибками -se... Они нужны в основном для того, чтобы помочь решить, когда udevadm settle
нужно запускать... Таким образом, в каком-то смысле можно считать, что ошибка ExecStartPre со статусом = 1 может быть в некотором роде «нормальным».
Проверяя свои системы, у меня есть одна, в которой команда ifquery
возвращает пустой вывод, так что, скорее всего, это объясняет статус = 1.
Я думаю, Debian мог бы сделать это немного лучше, используя if
вместо &&
, так как в этом случае, если условие не выполняется, команда завершается не со статусом 1, а с 0:
/bin/sh -c 'if [ "$CONFIGURE_INTERFACES" != "no" ] && [ -n "$(ifquery --read-environment --list --exclude=lo)" ]; then udevadm settle; fi'
Не создавайте кучу отдельных скалярных переменных, просто сохраните вывод команды в массиве вместо скалярной переменной, и тогда вы сможете получить к нему доступ как ips[0]
, ips[1]
и т. д. Используя printf
вместо вашего текущего конвейера nmap | awk
для простоты воспроизведения вашего точного вывода команды:
$ printf 'xxx.xxx.x.1 (device1)\nxxx.xxx.x.2 (device2)\nxxx.xxx.x.3 (device3)\n'
xxx.xxx.x.1 (device1)
xxx.xxx.x.2 (device2)
xxx.xxx.x.3 (device3)
$ ips=$(printf 'xxx.xxx.x.1 (device1)\nxxx.xxx.x.2 (device2)\nxxx.xxx.x.3 (device3)\n')
$ echo "$ips"
xxx.xxx.x.1 (device1)
xxx.xxx.x.2 (device2)
xxx.xxx.x.3 (device3)
$ readarray -t -d $'\n' ips < <(printf 'xxx.xxx.x.1 (device1)\nxxx.xxx.x.2 (device2)\nxxx.xxx.x.3 (device3)\n')
$ declare -p ips
declare -a ips=([0]="xxx.xxx.x.1 (device1)" [1]="xxx.xxx.x.2 (device2)" [2]="xxx.xxx.x.3 (device3)")
См.https://stackoverflow.com/a/32931403/1745001для получения дополнительной информации о вышеприведенном подходе к сохранению вывода команды в массиве по сравнению с другими подходами (readarray и mapfile являются синонимами ).