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