Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/bash/17.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何从/dev/tcp捕获Bash中的错误?_Bash_Tcp_Error Handling - Fatal编程技术网

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

如何从/dev/tcp捕获Bash中的错误?,bash,tcp,error-handling,Bash,Tcp,Error Handling,我对如何使用trap有一定的了解,但我一辈子都不知道如何捕获从/dev/tcp返回的错误 当运行“cat/dev/null 如果[$?-ne 0];然后 回声“问题” 出口1 fi 显然,此版本不会为调用者打开fd 3,但旨在丢弃错误消息。如果要捕获整个错误,最好的方法是将整个错误重定向到文件。文件描述符2用于显示错误,这些错误将显示在控制台上。 使用 echo>/dev/tcp/Host/port 2>文件名 现在您的文件名有错误。 可以使用$(cat文件名)在bash脚本中读取文件 如果不

我对如何使用trap有一定的了解,但我一辈子都不知道如何捕获从/dev/tcp返回的错误

当运行“cat 如果有人对如何在这种情况下使用陷阱有任何见解,那将非常有帮助。我目前的处理方式是:

if [ $? != 0 ]; then
    echo "error"
fi
这使我能够在发生错误时提交操作,但这是我知道如何处理这个特定问题的唯一方法。我知道这不是正确的方法,但这是我唯一能去工作的方法


如果有人知道如何在Bash中解决这个问题,那就太好了。不,我不能改用netcat。

陷阱允许您捕获信号,但恐怕它不是一个通用的异常管理工具


您可以尝试的一件事是捕获“cat”命令的输出,并检查它是否包含有关错误的信息(特别是如果cat的返回值不是零)。否则,在shell内部就不太可能发生错误。

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

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

仍然可以评估错误条件:

exec 3<>/dev/tcp/${2}/${3} || {
    echo "PROBLEM"
    exit 1
}
exec 3/dev/tcp/${2}/${3}||{
回声“问题”
出口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
#/bin/bash
#args:#1:主机,#2:端口
(exec 3/dev/tcp/${1}/${2})和>/dev/null
如果[$?-ne 0];然后
回声“问题”
出口1
fi

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

如果要捕获整个错误,最好的方法是将整个错误重定向到文件。文件描述符2用于显示错误,这些错误将显示在控制台上。 使用 echo>/dev/tcp/Host/port 2>文件名 现在您的文件名有错误。 可以使用$(cat文件名)在bash脚本中读取文件

如果不想显示错误,请重定向到/dev/null而不是文件