首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >在shell脚本运行时编辑它

在shell脚本运行时编辑它
EN

Stack Overflow用户
提问于 2010-08-03 23:49:52
回答 8查看 51K关注 0票数 107

您是否可以在shell脚本运行时对其进行编辑,并使更改影响正在运行的脚本?

我对csh脚本的具体情况很好奇,我有一个批处理运行了一堆不同的构建风格,并整晚运行。如果我在操作过程中发生了什么事情,我想进入并添加额外的命令,或者注释掉未执行的命令。

如果不可能,有没有什么shell或批处理机制可以让我这样做呢?

当然,我已经尝试过了,但我需要几个小时才能看到它是否有效,我很好奇幕后发生了什么或没有发生什么。

EN

回答 8

Stack Overflow用户

回答已采纳

发布于 2010-08-03 23:54:29

脚本不会以这种方式工作;执行的副本独立于您正在编辑的源文件。下次运行该脚本时,它将基于最近保存的源文件版本。

明智的做法是将此脚本分解为多个文件,然后分别运行它们。这将减少失败的执行时间。(例如,将批处理拆分为一个构建风格的脚本,分别运行每个脚本,以查看是哪个脚本造成了问题)。

票数 -86
EN

Stack Overflow用户

发布于 2013-10-17 23:28:54

试试这个。创建一个名为bash-is-odd.sh的文件

代码语言:javascript
复制
#!/bin/bash
echo "echo yes i do odd things" >> bash-is-odd.sh

这表明bash确实是在“边走边解释”脚本。事实上,编辑一个长时间运行的脚本会产生不可预知的结果,插入随机字符等。为什么?因为bash从最后一个字节位置读取,所以编辑会移动正在读取的当前字符的位置。

简而言之,Bash是非常非常不安全的,因为这个“特性”。svn和rsync在与bash脚本一起使用时尤其麻烦,因为默认情况下,它们会“合并”结果……就地编辑。rsync有一种模式可以解决这个问题。svn和git则不支持。

我提出了一个解决方案。创建一个名为/bin/bashx的文件

代码语言:javascript
复制
#!/bin/bash
source "$1"

现在,在您的脚本上使用#!/bin/bashx,并且始终使用bashx而不是bash运行它们。这解决了这个问题-你可以安全地rsync你的脚本。

@AF7建议/测试的替代(内嵌)解决方案:

代码语言:javascript
复制
{
   # your script
exit $?
} 

大括号可以防止编辑,退出可以防止追加。当然,如果bash提供一个选项,比如-w (整个文件),或者其他可以做到这一点的东西,我们都会过得更好。

票数 47
EN

Stack Overflow用户

发布于 2010-08-04 02:59:04

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

代码语言:javascript
复制
foo() {
  source foo.sh
}
foo
票数 18
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/3398258

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档