这是我的测试.sh
文件。
错误和输出.sh
#!/bin/bash
echo myecho
ls dflj
如果我跑./errorandoutput.sh >file 2>&1
,那么我们可以得到这样的file
但我希望STDOUT
信息在 后面STDERR
。所以我将命令更改为
./errorandoutput.sh >file 1>&2
但我得到一个空的file
。如何使信息位于重定向STDOUT
之后?STDERR
file
我的意思是我希望我能得到一个file
喜欢
ls: cannot access 'dflj': No such file or directory
myecho
答案1
这不是重定向顺序的工作方式。
重定向的顺序仅决定 shell 对文件描述执行的操作顺序,而不决定其内容。
在:
./errorandoutput.sh >file 2>&1
首先,shell 将标准输出重定向到file
,然后将标准错误重定向到现在指向的标准输出file
,因此标准输出和标准错误现在都转到file
。
在此阶段,shell 已完成重定向。它与文件内容无关file
。
内容的顺序file
由您在脚本内运行的命令的顺序决定。将您的脚本更改为:
#!/bin/bash
ls dflj
echo myecho
你就会得到你想要的。
答案2
这 '>' 的作用类似于“1**>**”
这样应该可以工作
./errorandoutput.sh 2>file 1>&2
$ ( echo yay ; fhgfhgf ) > out 2>&1
$ cat out
yay
bash: fhgfhgf: command not found
$ ( echo yay ; fhgfhgf ) 2> out 1>&2
$ cat out
yay
bash: fhgfhgf: command not found
答案3
如果重要,请将标准输出发送到文件,然后再输出。这当然需要一个脚本:
temp=/tmp/yc$$
yourcommand > ${temp}
cat ${temp} && rm -f ${temp}