回显到文件时,错误重定向到输出流失败。为什么?

时间:2017-01-24 13:50:43

标签: linux bash shell unix

res=`echo "hello" > /home/directory/folder1/xxx.txt 2>&1`

/home/directory/folder1/xxx.txt:权限被拒绝

echo $res

EMPTY LINE

我希望错误存储在变量res中,为什么不存储错误以及如何将错误存储在变量中?

2 个答案:

答案 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

我们应该使用括号来包装命令。