在运行时更改 bash 脚本

在运行时更改 bash 脚本

我有一个脚本test

#! /bin/bash

sleep 60
echo hello

我通过将其设置为可执行文件来运行它./test,并且当它运行 sleep 命令时,我将其更改为

#! /bin/bash

sleep 60
echo hello!!

输出是hello!!.我想知道为什么不呢hello

我怎样才能让它输出hello而不管以后的变化?

答案1

这是适合您的情况的解决方案。

将脚本分解为函数,每次调用函数时都会source从单独的文件中调用它。然后您可以随时编辑这些文件,并且您的运行脚本将在下次获取时获取更改。

foo() {
  source foo.sh
}
foo

测试

我创建了两个脚本callee.shcalled.sh如下所示。

#The contents of callee.sh script is as below. 
callee.sh

foo() {
  source called.sh
}
foo

#The contents of called.sh script is as below. 
called.sh

#! /bin/bash

sleep 60
echo hello

现在,我执行callee.sh它又调用我的called.sh脚本。基本上,called.sh这是我们将动态更改的脚本。

现在,当callee.sh执行时,我打开另一个外壳并将内容更改为,

#! /bin/bash

    sleep 60
    echo hello
    echo "I added more contents here"

callee.sh现在,在结束后我调用脚本的第一个 shell 中sleep,我得到的输出是,

hello

正如您所看到的,我没有I added more contents here在输出中得到所需的最终结果。

参考

https://stackoverflow.com/a/3399850/1742825

相关内容