加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 综合聚焦 > 服务器 > 安全 > 正文

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

发布时间:2020-12-15 18:22:59 所属栏目:安全 来源:网络整理
导读:更新:这是 How to make shell scripts robust to source being changed as they run的转贴 这是一件困扰我的小事: 我为一个快速而肮脏的工作编写了一个shell脚本(bash) 我运行脚本,它运行了很长一段时间 当它正在运行时,我在脚本中编辑了几行,为不同的作业
更新:这是 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
}

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

谢谢大家的帮助!

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读