2012-03-01 90 views
3

我对如何使用陷阱有一个中等的理解,但不能为我的生活弄清楚如何捕捉从/ dev/tcp返回的错误。如何从/ dev/tcp捕获Bash中的错误?

当运行“cat </dev/tcp/$ URL/$ PORT”,其中的URL是导致“连接:连接被拒绝”的服务器时,我找不出如何捕获该错误。

如果任何人有任何关于如何在这种情况下使用陷阱的见解,这将是非常有益的。我处理它目前的方法是这样的:

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

并允许如果发生错误,我可以承诺的行动,但是这是我知道如何处理这个具体问题的唯一途径。我知道,这不是正确的做法,但这是我唯一能够工作的事情。

如果任何人有任何洞见如何解决这个问题在Bash将是伟大的。不,我不能使用netcat。

回答

0

陷阱允许你捕捉信号,但它恐怕不是一般的异常管理工具。

有一件事你可能尝试将捕捉“猫”命令的输出,并检查它是否包含错误信息(特别是如果猫的返回值不为零)。否则,在shell内部实际上没有太多可能。

3

错误直接来自Bash而不是来自猫。因此重定向操作符是无用的。

我仍然在寻找一种方法来清除连接错误信息。

仍然错误条件可以评价:

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旨在丢弃错误消息。