Bash脚本:通过源vars.txt定义变量时没有这样的文件或目录



我有一个脚本,它创建一个文件的散列,将其写入vars.txt,然后在下次运行脚本时检查该变量,以确定文件是否已更改。

下面是脚本和vars.txt (pastebin)

当我运行脚本时,我用source /path/to/file

调用变量

当解析文件时,这会给我以下错误:

/opt/scripts/AutoCommit/vars.txt: line 2: etchttpdconf_dvhost.conf=925ec4d7bd0dc94c3710bcf5fb2c80f422806bb5  /etc/httpd/conf.d/vhost.conf: No such file or directory

最重要的是,当文件更改时,sed现在不是替换行,而是在下面添加额外的行。它过去没有这样做过。

你得到一个像这样结束的文件。直到最近这种情况才发生,所以我怀疑它们都是由同一个问题引起的。

这是一个精简版本的脚本,我认为问题可能在哪里。

问题似乎是您的文件名包含多个点。在生成变量名时,只有第一个被下划线替换。在变量名中使用点会导致您得到一个神秘的错误消息,但实际上只是一个语法错误。

要替换Bash的"参数展开"中模式的所有出现,您必须在模式前添加/。因此,解决问题的方法是在脚本的第6行使用以下代码:

fileVarName="${fileVarName//./_}"

最新更新