Ваш сценарий написан неправильно:
v=$line | grep [...]
Присвоение переменной не имеет вывода, поэтому вы ничего не передаете в grep
.
Вероятно, было бы проще указать awk
на ваш hosts.txt
файл:
$ nmap -v -sn 10.10.10.1/24 -oG hosts.txt > /dev/null 2>&1
$ awk '$NF=="Up" { print $2 }' hosts.txt
Учитывая формат файла, созданногоnmap
(простите за другой диапазон IP-адресов; Я явно нахожусь в другой сети, но пример все еще актуален):
$ head hosts.txt
# Nmap 7.60 scan initiated Fri May 11 10:14:28 2018 as: nmap -v -sn -oG hosts.txt 172.28.9.67/24
# Ports scanned: TCP(0;) UDP(0;) SCTP(0;) PROTOCOLS(0;)
Host: 172.28.9.0 (hostname1.internal) Status: Up
Host: 172.28.9.1 (hostname2.internal) Status: Up
Если нас интересуют только хосты, которые показывают Status: Up
, волшебное слово будет последним в строке. Поэтому мы используем awk
для просмотра только тех строк, где последнее поле равно Up
, и печатаем второе поле (с :IP-адресом ).
Я могу подтвердить проблему.
Да, проблема с bash версии 3.2.57 и более ранней заключается в том, что они не распознают метки времени в файле истории. Мне не удалось найти конкретное изменение в файле изменений bash. Вероятно, вам нужно обновить bash до более новой версии (4+ ).