最近,我发现了一篇关于在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的操作系统行为似乎表明了解释当前行为的脚本的完整负载,尽管不能保证它