gpt4 book ai didi

linux - 是否可以在 bash 脚本中在运行时更改其内容?

转载 作者:太空宇宙 更新时间:2023-11-04 12:23:07 24 4
gpt4 key购买 nike

简短版:在 bash 脚本中是否可以在运行时更改其内容?

长版:我有一个 bash 脚本,我想在它运行时将它的 EOL 从 CRLF'\r\n' 更改为 LF'\n'。目前,到目前为止我能做的就是将这一行放在脚本的顶部:

sed -i -e "s/\r$//g; s/^sed -i -e/#sed -i -e/g" $(basename $0); echo "Rerun again.." ; exit 0;

但这肯定是不切实际的。

我在想,当脚本在第一行运行时,它会创建一个子 shell 并将当前 shell 的内容放在那里,进行一些更改并将其放回上层 shell。这有可能吗?

做同样的想法,但在新的临时脚本中创建当前脚本的副本:

cat $0 > temp.sh

然后主脚本会执行temp.sh,脚本执行完毕后,会将temp.sh的副本抓回主脚本,并删除temp.sh。我认为这在理论上可行,但我确信还有更简单的方法。

NOTE: This is not about EOL particularly, I have some scripts that Ineed to apply same functionality to.

使用示例:该项目涉及在 windows 和 linux 上运行脚本,如果任何用户在 Windows 上通过编辑器打开脚本,它将 EOL 保存为 windows 格式,即 '\n\r',这将在 windows 上出现此错误:

./script.sh: line 5: syntax error near unexpected token `$'{\r''
'/script.sh: line 5: `foo(){

这就是我在脚本开头使用 sed 的原因。

最佳答案

不要更改当前运行的脚本。

一旦我有一个非常慢的脚本并且在执行过程中我开始调整它以为下一次执行做准备。它开始表现得很奇怪。在我看来 bash 只读取脚本的开头,然后再读取其他部分。所以当我的脚本很短时,一开始这不是问题,但随着我的脚本变长,它开始引起问题。

关于linux - 是否可以在 bash 脚本中在运行时更改其内容?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45497764/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com