更新:这是如何使shell脚本能够在运行时源代码被更改时依然稳定的重新发布的转载文章。
以下是我时不时会感到烦恼的小事:
- 我编写了一个用于快速而粗略工作的shell脚本(bash)
- 我运行脚本,它运行了相当一段时间
- 在脚本运行的同时,我编辑了几行代码,为不同的作业进行配置
- 但第一个进程仍在从相同的脚本文件中读取,并且出现了所有问题。
显然,脚本是通过每次从文件中加载每一行来解释的。是否有某种方法可以让脚本指示shell应一次性将整个脚本文件读入内存中?例如,Perl脚本似乎就是这样做的:编辑代码文件不会影响当前正在解释它的进程(因为它最初被解析/编译了?)。
我知道有很多方法可以解决这个问题。例如,我可以尝试类似于以下内容的东西:
cat script.sh | sh
或者sh -c "`cat script.sh`"
尽管这些方法可能无法正确处理脚本文件非常大的情况,并且流缓冲区和命令行参数的大小存在限制。我也可以编写一个辅助包装器,将脚本文件复制到一个锁定的临时文件中,然后执行它,但这似乎并不是很通用。
因此,我希望找到最简单的解决方案,只需要对脚本进行修改,而不涉及调用方式。我能否在脚本开头加上一两行代码呢?我不知道是否存在这样的解决方案,但我猜想它可能会使用$0变量...