在bash脚本中重定向输出

ven*_*syv 0 python linux bash redirect

我有一个bash脚本运行的东西:

python myscript.py --input=/path/file --someOption=value > /path/file
Run Code Online (Sandbox Code Playgroud)

如果我在没有重定向的情况下运行它,一切正常.如果我使用重定向运行它,文件将被截断.我怀疑python正在执行整行,包括重定向,实际上重定向必须由bash执行.

我试过了:

exec "python myscript.py --input=/path/file --someOption=value" 但我得到命令未找到错误.

如何让python只执行python部分,重定向由bash执行?

tha*_*guy 6

您无法同时读取和写入同一文件.

将输出重定向到临时位置,然后覆盖输入:

if python myscript.py --input=/path/file --someOption=value > /path/file.tmp
then
  mv /path/file.tmp /path/file
fi
Run Code Online (Sandbox Code Playgroud)

  • @ventsyv,在命令启动前*重定向发生; 在这种情况下,它运行命令,其FD 1写入已截断的`/ path/file` inode.由于它已被截断,显然无法从那里读取输入. (2认同)