执行中修改Bash脚本,为何会执行新增的非注释命令?
Bash脚本执行中修改内容后执行新命令的原因分析
你遇到的这个现象核心原因是:Bash解释器不会一次性把整个脚本加载到内存执行,而是逐行(或按固定大小的块)读取脚本内容,执行完当前内容后,再从文件的当前位置继续读取下一部分。
具体到你的场景:
- 启动
exec.sh后,Bash打开脚本文件,读取第一行python a.py并启动对应的Python进程执行。此时脚本文件的文件描述符保持打开,读取指针停在第一行结束后的位置。 - 在
python a.py运行期间,你修改了脚本文件的内容,将原内容替换为注释#python a.py和执行python b.py。 - 当
python a.py执行完成后,Bash会从当前的文件指针位置继续读取后续内容——此时读取到的是修改后的python b.py这一行,因此就会执行这个命令。
简单来说,Bash是边读边执行脚本,而不是一开始就把所有内容缓存起来。只要脚本文件的文件描述符还处于打开状态,后续读取的就是文件的实时内容,而非启动时的初始内容。
内容的提问来源于stack exchange,提问作者hpwww
相关产品推荐
相关产品推荐

