首页 > 解决方案 > 在运行时编辑 shell 脚本和 python 脚本

问题描述

最近,我发现了一篇关于在运行时编辑 shell 脚本的文章。

在运行时编辑 shell 脚本

我准备了该代码以通过额外的 python 脚本调用来重现该现象。我发现echo在 bash 中不受编辑影响,而 python 脚本受到影响。

有人可以解释这种现象吗?我期望所有的标准输出都应该被“修改”。

#!/bin/bash
sleep 30

echo "not modified"
python my_python.py
echo "not modified"
print("not modified")
$ bash test.sh  // while sleeping, I edited test.sh and my_python.py to "modified"
not modified
 modified
not modified

标签: pythonbashshell

解决方案


bash 脚本已经加载到内存中并正在执行,直到下次运行时才会影响结果。python脚本尚未加载,修改后加载到内存中。

如果您执行相反的操作并从等效的 python 脚本启动 bash 脚本,您将获得相同的反向行为。

编辑 05/10/2020

正如戈登戴维森所指出的那样;

“不同版本的 bash 做不同的事情。有些在执行时逐字节读取文件,有些我认为以 8KB 块加载它(不一定是整个文件),有些做更复杂的事情(AIUI 它也可以取决于他们正在运行的操作系统)。请参阅我的答案覆盖正在执行的 bash 脚本文件。最终结果:不要指望任何特定行为。”

也就是说,OP 的操作系统行为似乎表明了解释当前行为的脚本的完整加载,尽管不能保证这一点。


推荐阅读