无法捕获回显命令行的stdout或stderr

时间:2014-02-26 03:00:59

标签: bash shell

我有这样的事情:

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

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

我试过了:

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

此处存在所有直接路径。

4 个答案:

答案 0 :(得分:1)

我对您的问题的解释是,您想捕获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帖子:How to store standard error in a variable in a Bash script

重点是将stderr指向stdout,将stdout指向/ dev / null。

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

$ ./bitcoins_bad.sh 
$ echo $?
-1
$ ./bitcoins_good.sh
$ echo $?
0

答案 1 :(得分:1)

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

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

答案 2 :(得分:0)

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

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

答案 3 :(得分:-1)

看一个名为tee的程序:

来自How to redirect output to a file and stdout

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