我正在尝试编写一个可以自我编辑的bash脚本。我尝试使用的代码行是:
sed "s/$STRING_TO_REPLACE/$NEW_STRING/" < $0 > $0
但是在运行脚本之后,我最终得到了一个空文件。有什么建议吗?
我正在创建一个脚本,它有两个包含默认值的变量。唯一的问题是,这些缺省值对于将使用它的许多站点中的每一个都是不同的。我宁愿运行这些站点的人都不必打开脚本并自己编辑默认值,所以我想包括在脚本中更改默认值的能力。我的一个要求是脚本必须是自包含的;没有其他文件伴随脚本,并且没有环境变量。这将要求脚本能够自我编辑。
发布于 2010-07-03 03:00:58
如果要使用sed进行就地替换,请使用-i
开关。
我不建议在运行时重写当前执行的脚本。我不确定这是否可能,但如果它是可能的,它肯定是有趣的(阅读:困难)代码维护:-)
发布于 2010-07-03 03:03:19
首先,这是一个非常糟糕的想法,我无法想象它的任何用例都不能被其他东西覆盖。
发生这种情况的原因是,当您执行>file时,它将以读取模式打开文件并将其截断为0长度,并且输入没有要读取的内容。您需要使用临时文件。你可以在here上看到更多信息。
发布于 2013-09-19 00:32:47
我正在做的,也是我推荐的,是有一个配置文件($HOME/.myscript.cfg),让你的脚本检测它的存在(和版本)并相应地创建/更新它。这样,第一次运行可以提出问题,随后的运行可以完成自己的工作,而不会因为重复的问题而困扰操作员。
https://stackoverflow.com/questions/3168402
复制相似问题