如果我像这样运行一个Bash脚本:
./script.sh 2>&1
stderr
将会被重定向到stdout
。
如果脚本内部调用某些工具(例如ls
)或者生成一个新的进程,那么这些子进程的stderr
是否也会被重定向到stdout
呢?
2>&1
中使用的数字。当我们进行重定向时,在子进程中更改了这三个条目。由于此时我们的子进程是另一个shell进程,所以这是由shell完成的。ls
,我们可以在进程内切换程序。新程序从头开始运行,但某些核心项目保留下来。例如用户、组、当前目录、umask和文件描述符表都保留供新程序使用。是的,简短回答就是这样。你可以自己尝试一下:
$ (>&1 echo "STDOUT is gone"; >&2 echo "I'm still here") > /dev/null
I'm still here
STDOUT
)[我正在使用花括号:()
启动一个新的shell]将被发送到/dev/null
,所有子进程的STDOUT
也将如此。./script.sh 2>&1 &
在我的情况下,这对我很有效。我不确定这些子进程是否也将其stderr重定向到stdout。