您是否可以在shell脚本运行时对其进行编辑,并使更改影响正在运行的脚本?
我对csh脚本的具体情况很好奇,我有一个批处理运行了一堆不同的构建风格,并整晚运行。如果我在操作过程中发生了什么事情,我想进入并添加额外的命令,或者注释掉未执行的命令。
如果不可能,有没有什么shell或批处理机制可以让我这样做呢?
当然,我已经尝试过了,但我需要几个小时才能看到它是否有效,我很好奇幕后发生了什么或没有发生什么。
发布于 2010-08-03 23:54:29
脚本不会以这种方式工作;执行的副本独立于您正在编辑的源文件。下次运行该脚本时,它将基于最近保存的源文件版本。
明智的做法是将此脚本分解为多个文件,然后分别运行它们。这将减少失败的执行时间。(例如,将批处理拆分为一个构建风格的脚本,分别运行每个脚本,以查看是哪个脚本造成了问题)。
发布于 2013-10-17 23:28:54
试试这个。创建一个名为bash-is-odd.sh
的文件
#!/bin/bash
echo "echo yes i do odd things" >> bash-is-odd.sh
这表明bash确实是在“边走边解释”脚本。事实上,编辑一个长时间运行的脚本会产生不可预知的结果,插入随机字符等。为什么?因为bash从最后一个字节位置读取,所以编辑会移动正在读取的当前字符的位置。
简而言之,Bash是非常非常不安全的,因为这个“特性”。svn和rsync
在与bash脚本一起使用时尤其麻烦,因为默认情况下,它们会“合并”结果……就地编辑。rsync
有一种模式可以解决这个问题。svn和git则不支持。
我提出了一个解决方案。创建一个名为/bin/bashx
的文件
#!/bin/bash
source "$1"
现在,在您的脚本上使用#!/bin/bashx
,并且始终使用bashx
而不是bash
运行它们。这解决了这个问题-你可以安全地rsync
你的脚本。
@AF7建议/测试的替代(内嵌)解决方案:
{
# your script
exit $?
}
大括号可以防止编辑,退出可以防止追加。当然,如果bash提供一个选项,比如-w
(整个文件),或者其他可以做到这一点的东西,我们都会过得更好。
发布于 2010-08-04 02:59:04
将脚本拆分成多个函数,每次调用一个函数时,您都会从一个单独的文件中source
它。然后,您可以随时编辑这些文件,并且您的运行脚本将在下次获取源代码时获取这些更改。
foo() {
source foo.sh
}
foo
https://stackoverflow.com/questions/3398258
复制相似问题