在运行时编辑 shell 脚本和 python 脚本



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

编辑shell脚本';s正在运行

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

有人能解释这种现象吗?我期望所有的std输出都应该被"修改"。

  • 测试.sh
#!/bin/bash
sleep 30
echo "not modified"
python my_python.py
echo "not modified"
  • my_python.py
print("not modified")
  • 输出结果
$ bash test.sh  // while sleeping, I edited test.sh and my_python.py to "modified"
not modified
modified
not modified

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

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

编辑05/10/2020

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

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

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

最新更新