res=`echo "hello" > /home/directory/folder1/xxx.txt 2>&1`
/home/directory/folder1/xxx.txt:权限被拒绝
echo $res
EMPTY LINE
我希望错误存储在变量res中,为什么不存储错误以及如何将错误存储在变量中?
答案 0 :(得分:3)
您的错误来自 shell ,而不是来自命令,因此您必须重定向 shell 的输出流,例如,如下所示:
$ res=$(bash -c 'echo "hello" > /home/directory/folder1/xxx.txt' 2>&1)
$ echo $res
bash: /home/directory/folder1/xxx.txt: No such file or directory
实际上,创建子shell有一个更好的语法:
$ res=$((echo "hello" > /home/directory/folder1/xxx.txt) 2>&1)
$ echo $res
bash: /home/directory/folder1/xxx.txt: No such file or directory
答案 1 :(得分:1)
使用括号
res=`(echo "hello" > /home/directory/folder1/xxx.txt) 2>&1`
说明: 您只需将数据重定向到任何流一次。
res=`echo "hello" > /home/directory/folder1/xxx.txt 2>&1`
在这里你首先重定向"你好"输出流然后将错误输出到输出流,这是不正确的。所以告诉shell我们要重命名从命令中产生的错误:
echo "hello" > /home/directory/folder1/xxx.txt
我们应该使用括号来包装命令。