shell脚本是否可以指示其行最初是否已加载到内存中?

Ano*_*ous 10 bash shell scripting

更新:这是如何使shell脚本在运行时更改源代码的重新发布

这是一个困扰我的小事情:

  1. 我为一个快速而肮脏的工作编写了一个shell脚本(bash)
  2. 我运行脚本,它运行了很长一段时间
  3. 在它运行时,我在脚本中编辑了几行,为不同的工作配置它
  4. 但是第一个进程仍在读取相同的脚本文件并且搞砸了.

显然,脚本是通过在需要时从文件中加载每一行来解释的.有没有什么方法可以让脚本向shell指示整个脚本文件应该一次性读入内存?例如,Perl脚本似乎这样做:编辑代码文件不会影响当前正在解释它的进程(因为它最初是解析/编译的?).

我知道有很多方法可以解决这个问题.例如,我可以尝试这样的事情:

cat script.sh | sh
Run Code Online (Sandbox Code Playgroud)

要么

sh -c "`cat script.sh`"
Run Code Online (Sandbox Code Playgroud)

...尽管如果脚本文件很大并且流缓冲区和命令行参数的大小有限,那些可能无法正常工作.我还可以编写一个辅助包装器,将脚本文件复制到锁定的临时文件然后执行它,但这看起来不太便携.

所以我希望最简单的解决方案只涉及对脚本的修改,而不是调用它的方式.我可以在脚本开头添加一行或两行吗?我不知道这样的解决方案是否存在,但我猜它可能会使用$ 0变量......

Ano*_*ous 9

我发现的最佳答案是提供的解决方案的一个非常小的变化如何使shell脚本在运行时对源进行更改.感谢camh注意转贴!

#!/bin/sh
{
    # Your stuff goes here
    exit
}
Run Code Online (Sandbox Code Playgroud)

这可以确保最初解析所有代码; 请注意,"退出"对于确保稍后不访问该文件以查看是否还有其他行要解释至关重要.此外,如前一篇文章所述,这并不能保证脚本调用的其他脚本是安全的.

谢谢大家的帮助!