назначить вывод nmap нескольким переменным

Это просто означает, что эта команда завершилась со статусом 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'
0
19.03.2020, 23:23
1 ответ

Не создавайте кучу отдельных скалярных переменных, просто сохраните вывод команды в массиве вместо скалярной переменной, и тогда вы сможете получить к нему доступ как 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 являются синонимами ).

1
28.04.2021, 23:20

Теги

Похожие вопросы