我知道如果直接在命令行上执行,我可以将 stdout 和 stderr 从脚本重定向到如下文件:
sh myscript1.sh &>output.txt &
但是,如果我将上述命令放在同一文件夹中的另一个 bash 脚本中执行,而不是使用命令行,则它不起作用。
我在终端上得到了 stdout 和 stderr,但 output.txt 永远不会被写入。这是为什么,我该如何解决?
答案1
请注意,这&>
是一个重定向运算符具体到bash
。您似乎习惯sh
从命令行执行脚本(不依赖于#!
脚本本身中的 -line )。如果您对使用的脚本执行此操作,则绝对不能保证它可以正常&>
工作。/bin/sh
bash
相反,对于重定向标准输出和标准错误的可移植方法,请使用
./myscript.sh >output.txt 2>&1
或者,如果您确实想使用&>
重定向(和/或其他bash
特定的东西),请使用bash scriptname
来执行bash
脚本,或者确保脚本有一个#!
指向bash
可执行文件的正确行,是可执行的,然后运行脚本作为./scriptname
。
在非bash
shell 中,utility &>file
与
utility & >file
这与以下相同
utility &
>file
utility
它将在后台启动,然后创建一个名为 的空文件(如果已经存在file
则截断)。file
没有错误在该命令中,它只是不执行bash
用户可能期望的操作。