我有这样的东西:
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