Как отлавливать ошибки в Bash из / dev / tcp? - PullRequest
3 голосов
/ 02 марта 2012

У меня есть умеренное понимание того, как использовать ловушку, но я не могу понять, как поймать ошибку, возвращенную из /dev/tcp.

При запуске "cat </ dev / tcp /$ URL / $ PORT ", где URL - это сервер, который приводит к сообщению" connect: Соединение отказано ". Я не могу понять, как отловить эту ошибку. </p>

Если у кого-то есть понимание того, как использовать ловушку вВ этом случае это было бы чрезвычайно полезно.В настоящее время я работаю с ним следующим образом:

if [ $? != 0 ]; then
    echo "error"
fi

, и это позволяет мне иметь возможность совершать действие при возникновении ошибки, но это единственный способ, которым я знаю, как справиться с этой конкретной проблемой.Не знаю, как это сделать, я знаю, но это единственное, что я могу заставить работать.

Если у кого-нибудь есть понимание, как решить эту проблему в Bash, это было бы замечательно.И нет, я не могу вместо этого использовать netcat.

Ответы [ 3 ]

5 голосов
/ 11 марта 2013

Ошибка исходит непосредственно от Bash, а не от cat.Таким образом, операторы перенаправления бесполезны.

Я все еще ищу способ стереть сообщение об ошибке подключения.

Тем не менее состояние ошибки можно оценить:

exec 3<>/dev/tcp/${2}/${3} || {
    echo "PROBLEM"
    exit 1
}

Модифицированная версия вышеупомянутого теста может быть:

#!/bin/bash

# args: #1: host, #2: port

(exec 3<>/dev/tcp/${1}/${2}) &>/dev/null
if [ $? -ne 0 ] ; then
    echo "PROBLEM"
    exit 1
fi

Очевидно, что эта версия не открывает fd 3 для вызывающей стороны, но предназначена для сброса сообщения об ошибке.

0 голосов
/ 20 сентября 2018

Если вы хотите перехватить всю ошибку, лучше всего перенаправить всю ошибку в файл.Файловый дескриптор 2, который управляет, используется для отображения ошибок, и они будут отображены на консоли.Используйте echo> / dev / tcp / Host / port 2> filename Теперь ваше имя файла содержит ошибку.Вы можете прочитать файл в bash-скрипте, используя $ (cat filename)

Если вы не хотите отображать перенаправление ошибок в / dev / null вместо файла

0 голосов
/ 02 марта 2012

Ловушка позволяет вам ловить сигналы, но я боюсь, что это не средство управления общими исключениями.

Одна вещь, которую вы могли бы попробовать , - это перехватить вывод команды "cat" и проверить, содержит ли она информацию об ошибке (особенно если возвращаемое значение cat не равно нулю). В противном случае на самом деле не так много здесь, внутри оболочки.

...