如何从/ dev/tcp中捕获Bash中的错误?

Fre*_*yer 3 error-handling bash tcp

我对如何使用陷阱有一个温和的理解,但不能在我的生活中弄清楚如何捕获从/ dev/tcp返回的错误.

当运行"cat </ dev/tcp/$ URL/$ PORT",其中URL是导致"connect:Connection refused"的服务器时,我无法弄清楚如何捕获该错误.

如果有人对这种情况下如何使用陷阱有任何见解,那将非常有帮助.我处理它的当前方式是这样的:

if [ $? != 0 ]; then
    echo "error"
fi
Run Code Online (Sandbox Code Playgroud)

这使我能够在发生错误时提交动作,但这是我知道如何处理这个特定问题的唯一方法.我知道,这不是正确的做法,但这是我唯一可以开展的工作.

如果有人有任何见解如何在Bash中解决这个问题会很棒.不,我不能使用netcat.

小智 5

错误直接来自Bash,而不是来自cat.因此重定向运算符是无用的.

我仍在寻找消除连接错误消息的方法.

仍然可以评估错误条件:

exec 3<>/dev/tcp/${2}/${3} || {
    echo "PROBLEM"
    exit 1
}
Run Code Online (Sandbox Code Playgroud)

上述测试的修改版本可以是:

#!/bin/bash

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

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

显然,此版本不会为调用者打开fd 3,但旨在丢弃错误消息.