.sh 文件中 nohup 的重定向输出无法正常工作

.sh 文件中 nohup 的重定向输出无法正常工作

我想运行很多 python 脚本并保存它们的输出。因为在终端里一一运行太麻烦了。根据建议,我决定使用 shell 脚本 (.sh)。

为了简化问题,假设我有两个要运行的 python 脚本(print1.pyprint2.py)。脚本print1.py输出编号为 1,脚本print2.py输出编号为 2。

如果不使用shell脚本(即单独输入命令),我可以获得想要的结果。

如果不使用 shell 脚本,我会使用的命令是

$ nohup python print1.py &> 1.txt &
$ nohup python print2.py &> 2.txt &

分别将输出重定向到1.txt2.txt。所以1.txt将包含一个数字 1,并且2.txt将包含一个数字 2。如果我在终端中分别输入这两个命令,效果很好。这就是我想要的。

使用 shell scipt,我无法得到我想要的东西(重定向似乎无法正常工作)。

但是,如果我使用 shell 脚本,即command.sh

#! /bin/sh
nohup python print1.py &> 1.txt &
nohup python print2.py &> 2.txt &

我输入

$ sh command.sh

跑步command.sh。输出不是我所期望的。1.txt并将2.txt被创造,但它们什么也不包含。还将创建一个nohup.out文件,其中包含数字 1 和 2。

终端上显示的输出是

$ nohup: appending output to 'nohup.out'
nohup: appending output to 'nohup.out'

这个答案提示同#! /bin/sh,有些shell可能看不懂&>。所以我也尝试#! /bin/sh改成#! /bin/bash.不过,也是一样的。

使用 shell 脚本是否可以得到与单独输入命令相同的结果?

答案1

如果您明确指定sh command.sh,sh用于运行您的脚本,无论该#!行如何。然而,正如链接的答案所说,sh不理解&>为自己的运算符并读取

nohup python print1.py &> 1.txt &

作为两个命令:

nohup python print1.py &
> 1.txt &

第一个导致 的输出print1.py被写入nohup.out,第二个创建一个空的1.txt

如果您不想bash运行sh您的command.sh,您可以使用

bash command.sh

或者放入#!/bin/bash文件#!/bin/sh中,使其可执行,然后简单地运行

./command.sh

在其自己的。

相关内容