更新:这是
How to make shell scripts robust to source being changed as they run的转贴
原文链接:https://www.f2er.com/bash/385005.html这是一件困扰我的小事:
>我为一个快速而肮脏的工作编写了一个shell脚本(bash)
>我运行脚本,它运行了很长一段时间
>当它正在运行时,我在脚本中编辑了几行,为不同的作业配置它
>但是第一个进程仍在读取相同的脚本文件并且搞砸了.
显然,脚本是通过在需要时从文件中加载每一行来解释的.有没有什么方法可以让脚本向shell指示整个脚本文件应该一次性读入内存?例如,Perl脚本似乎这样做:编辑代码文件不会影响当前正在解释它的进程(因为它最初是解析/编译的?).
我知道有很多方法可以解决这个问题.例如,我可以尝试这样的事情:
cat script.sh | sh
要么
sh -c "`cat script.sh`"
…尽管如果脚本文件很大并且流缓冲区和命令行参数的大小有限,那些可能无法正常工作.我还可以编写一个辅助包装器,将脚本文件复制到锁定的临时文件然后执行它,但这看起来不太便携.
所以我希望最简单的解决方案只涉及对脚本的修改,而不是调用它的方式.我可以在脚本开头添加一行或两行吗?我不知道是否存在这样的解决方案,但我猜它可能会使用$0变量……