Это былоошибкой в gtk3, но уже исправлено. Если вы обновите систему и перезапустите ее, буфер обмена снова заработает.
Проблема в том, что [[$NMAP | grep "Host is up" -ne ""]]
очень далек от корректного синтаксиса bash. Сообщения об ошибках не говорят вам, как именно это исправить, но они намекают на то, что что-то серьезно не так.
[[
выражение]]
требует пробелов внутри скобок. См. Скобки в условии if :, почему я получаю синтаксические ошибки без пробелов?|
— оператор канала между командами. Это не оператор в условных выражениях . На самом деле [[ foo | bar ]]
анализируется как команда [[ foo
, переданная в команду bar ]]
, которая не делает ничего полезного. -eq
сравнивает целые числа, но то, что вы окружаете, не является целым числом. Чтобы проверить, содержит ли строка подстроку, вы можете либо использовать оператор ==
в условном выражении, или конвейер через grep (, который не включают условное выражение ). С grep вы не запускаете $NMAP
как команду, вы хотите передать это как входные данные для grep, поэтому вам нужно echo
его в канал. Передайте -q
в grep, так как вас интересует только его статус возврата, а не вывод.
if echo "$NMAP" | grep "Host is up" && echo "$NMAP" | grep "closed"; then …
С условным выражением:
if [[ $NMAP == *"Host is up"* || $NMAP == *"closed"* ]]; then …
Обязательно прочтите Запутался в операторах [[ vs [ vs (vs ((, которые объясняют условные выражения и то, что они не являются единственным способом проверить истинность условия. Кроме того, прочтите Почему мой сценарий оболочки забивается пробелами или другими специальными символами?
nmap -p 1700 router.eu.thethings.network
Будет напечатано «Host is up», если сеть хоста работает и на порту ничего не прослушивается. Используйте nc
вместо:
if nc -w1 -z router.eu.thethings.network 1700; then
echo "Port is listening"
else
echo "Port is not listening"
fi
Существует пример отображения Host is up
, когда grep
успех и Host is down
, когда grep
ничего не возвращает:
NMAP=$(nmap -p 1700 router.eu.thethings.network)
(NMAP$ | grep "Host is up") &>/dev/null && echo "Host is up" || echo "Host is down"