命令od / /dev/null返回标准错误和标准输出,在这里只用于测试。
我可以通过以下方法将标准错误重定向到标准输出:
echo "The command result is: $(od / /dev/null 2>&1)"返回:
The command result is: od: /: read error: Is a directory
0000000而错误部分是"od: /: read :是一个目录“,而非错误部分是"0000000”。
我需要在输出中添加一个引用,以区分哪个部分是标准错误,方法是添加一个前缀"The error is:",并获得和输出如下:
The command result is: 0000000
The error is: od: /: read error: Is a directory如果没有错误,字符串“错误是:”仍然可以是输出的一部分。
有什么建议如何做到这一点吗?
编辑:
answer from 适用于测试命令od / /dev/null,但是当我尝试使用以下ssh命令(这是我将实际使用的命令)时,标准错误出现在输出的末尾,而不是在开始/结束字符串中,并且缺少开始字符串:
Command: echo "START___$(ssh user@1.1.1.900 2>&1 2> >(sed 's/^/ERR: /' >&2))___END"
Output: ___END__ERR: ssh: Could not resolve hostname 1.1.1.900: Name or service not known当我使用test命令并添加开始/结束字符串时,我得到一个正常的输出,而标准输出和错误在开始/结束字符串中:
Command:echo "START___$(od / /dev/null 2>&1 2> >(sed 's/^/ERR: /' >&2))___END"
Output: START___0000000
ERR: od: /: read error: Is a directory___END对这种情况有帮助吗?
编辑2
我在子进程中添加了ssh命令,但仍然存在问题。有趣的是,对于telnet来说,它可以正常工作。
SSH:
Command: echo "START___$((ssh user@1.1.1.900) 2>&1 2> >(sed 's/^/ERR: /' >&2))___END"
Output: ___END__ERR: ssh: Could not resolve hostname 1.1.1.900: Name or service not knownTelnet:
Command: echo "START___$((telnet 1.1.1.900) 2>&1 2> >(sed 's/^/ERR: /' >&2))___END"
Output: START___ERR: telnet: could not resolve 1.1.1.900/telnet: Name or service not known___END编辑3-解决方案
使用ssh命令的解决方案是在输入sed之前从ssh响应中筛选控制字符:
echo "START___$(ssh user@1.1.1.900 2>&1 2> >(tr -d '[:cntrl:]' | sed 's/^/ERR: /' >&2))___END"发布于 2020-06-30 08:42:11
您可以使用sed和进程替换:
echo "The command result is: $(od / /dev/null 2>&1 2> >(sed 's/^/ERR: /' >&2))"发布于 2020-06-30 11:23:44
对于基于Debian的Linuxes,运行apt install devscripts,然后尝试实用程序。
annotate-output od / /dev/null输出:
07:21:44 I: Started od / /dev/null
07:21:44 E: od: /: read error: Is a directory
07:21:44 O: 0000000
07:21:44 I: Finished with exitcode 1https://stackoverflow.com/questions/62653415
复制相似问题