微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

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

更新:这是 How to make shell scripts robust to source being changed as they run的转贴

这是一件困扰我的小事:

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

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

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

cat script.sh | sh

要么

sh -c "`cat script.sh`"

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

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

我发现的最佳答案是为 How to make shell scripts robust to source being changed as they run提供的解决方案略有不同.感谢camh注意到转发!
#!/bin/sh
{
    # Your stuff goes here
    exit
}

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

谢谢大家的帮助!

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。

相关推荐