从 bash 脚本内的 bash 脚本重定向 stdout 和 stderr

从 bash 脚本内的 bash 脚本重定向 stdout 和 stderr

我知道如果直接在命令行上执行,我可以将 stdout 和 stderr 从脚本重定向到如下文件:

sh myscript1.sh &>output.txt &

但是,如果我将上述命令放在同一文件夹中的另一个 bash 脚本中执行,而不是使用命令行,则它不起作用。

我在终端上得到了 stdout 和 stderr,但 output.txt 永远不会被写入。这是为什么,我该如何解决?

答案1

请注意,这&>是一个重定向运算符具体到bash。您似乎习惯sh从命令行执行脚本(不依赖于#!脚本本身中的 -line )。如果您对使用的脚本执行此操作,则绝对不能保证它可以正常&>工作。/bin/shbash

相反,对于重定向标准输出和标准错误的可移植方法,请使用

./myscript.sh >output.txt 2>&1

或者,如果您确实想使用&>重定向(和/或其他bash特定的东西),请使用bash scriptname来执行bash脚本,或者确保脚本有一个#!指向bash可执行文件的正确行,是可执行的,然后运行脚本作为./scriptname


在非bashshell 中,utility &>file

utility & >file

这与以下相同

utility &
>file

utility它将在后台启动,然后创建一个名为 的空文件(如果已经存在file则截断)。file没有错误在该命令中,它只是不执行bash用户可能期望的操作。

相关内容