如何从bash脚本中将信息写入文件并立即查看结果?

时间:2015-06-04 21:12:12

标签: bash stdout flush buffering

我需要帮助。我无法理解如何从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

也许有更有效的方式?

2 个答案:

答案 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的帮助;)