我有这样的事情:
echo "string1" > /sys/../../../..
如果这会引发错误,我想捕获它。目前我无法做到这一点。 你能建议我怎么做?
我试过了:
(echo "string1" > /sys/../../../..) > abc 2>&1 # does not work
此处存在所有直接路径。
答案 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)