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

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 永远不会被写入。这是为什么,我该如何解决?

Kus*_*nda 5

请注意,&>这是特定于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用户的预期进行操作。