我有一个bash脚本,它运行的内容如下:
python myscript.py --input=/path/file --someOption=value > /path/file
如果我在没有重定向的情况下运行它,一切正常。如果我使用重定向运行它,文件将被截断。我怀疑python正在执行整行,包括重定向,实际上重定向必须由bash执行。
我试过了:
exec "python myscript.py --input=/path/file --someOption=value"
但我发现命令未找到错误。
如何让python只执行python部分,重定向由bash执行?
答案 0 :(得分:6)
您无法同时读取和写入同一文件。
将输出重定向到临时位置,然后覆盖输入:
if python myscript.py --input=/path/file --someOption=value > /path/file.tmp
then
mv /path/file.tmp /path/file
fi
答案 1 :(得分:1)
问题是您使用相同的文件作为输入和输出。 Shell首先打开重定向文件,它变为空。然后你的python脚本读取空文件。
可以使用 tee
轻松解决。
python myscript.py --input=/path/file --someOption=value | tee /path/otherfile