我需要帮助。我无法理解如何从bash脚本向文件写入信息并立即查看结果。 例如:
#!/usr/bin/env bash
PID=$$
echo "PID is $PID"
echo $PID > my_script.pid
echo "Sleeping..."
sleep 5
echo "Finished"
PID编号立即显示在控制台中,但在脚本完成后我在文件中看到它。 我有Mac OS X Yosemite 10.10.3。 我尝试了很多冲洗缓冲的东西。没有结果:(
请帮忙!
更新。 我的目标是定义该脚本的另一个实例是否仍在运行。我决定使用pid文件和条件:
PID=`cat $PID_FILE`
if ps -p $PID > /dev/null; then
echo "script already running"
exit 1
fi
也许有更有效的方式?
答案 0 :(得分:1)
你必须尽快读它。要确认它是否立即被写入,请将脚本更改为:
#!/usr/bin/env bash
PID=$$
echo "PID is $PID"
echo "$PID written to file." >> my_script.pid
echo "Sleeping..."
sleep 5
echo "Finished"
然后运行:
touch my_script.pid
tail -F my_script.pid &
./my_script.sh
tail -F命令将在后台运行,并在写完后立即输出写入my_script.pid的内容。你看到的延迟是在尾部,一旦echo返回就会被写入。
答案 1 :(得分:0)
很抱歉误会。实际上它工作正常。 GUI工具(PyCharm)中检出文件修改的问题。它有一个有趣的延迟。 所以当我从同一个脚本检查以前的PID时,它工作得很好:) 非常感谢fernan的帮助;)