无法捕获 echo 命令行的标准输出或标准输出



我有这样的东西:

echo "string1" > /sys/../../../..

万一这引发错误,我想捕获它。目前我无法做到这一点。你能建议我该怎么做吗?

我试过了:

(echo "string1" > /sys/../../../..) > abc 2>&1 # does not work

所有直接路径都存在于此处。

我对你的问题的解释是你想捕获bash变量中的任何错误。您可以使用

$ error=$( echo 'hw' 2>&1 > /dev/null)
$ echo $error
<blank>
$ error=$( echo 'string' > /sys/not-a-path 2>&1 > /dev/null )
$ echo $error
bash: /sys/not-a-path/: Is a directory

我的答案基于此处有用的SO帖子:如何在Bash脚本中的变量中存储标准错误。

关键是将stderr定向到stdout,将stdout定向到/dev/null。

当然,您可以通过在调用后检查$?来检查返回的错误代码。例如

$ ./bitcoins_bad.sh 
$ echo $?
-1
$ ./bitcoins_good.sh
$ echo $?
0
如果要

在(日志)文件中捕获完整的错误消息:

echo "string1" 2>logerror >/sys/../../../.. 

要查看它:

cat logerror    

如果要在变量中显示完整的错误消息

ERROR=$( echo "string1" 2>&1 >/sys/../../../.. )

要查看它:

echo $ERROR

如果您只想知道它是成功还是失败:

echo "string1" 2>/dev/null >/sys/../../../..
RESULT="$?"

要查看它:

[ "$RESULT" = "0" ] && echo OK || echo failed

最优雅的:

echo "string1" 2>/dev/null >/sys/../../../.. && echo OK || echo FAIL

这不是回声的错误。这是 shell 的错误(无法打开文件进行写入)。你可以做这样的事情

sh -c 'echo > /sys/power/wakeup_count' 2> abc

看看一个名为tee的程序:

从 如何将输出重定向到文件和标准输出

ls -lR / 2>&1 | tee output.file

相关内容

  • 没有找到相关文章

最新更新