我正在编写一个脚本,将dafault配置值替换为用户指定的配置值。但我从sed那里得到了未终止的命令错误。在谷歌搜索了2个小时之后,我仍然没有弄清楚是什么原因造成了这种情况。这些台词是:
CONFIG_GMETAD_COMPUTENODES="scccompute1 scccompute2"
CONFIG_GMETAD="/etc/gmetad.conf"
sed -i 's/localhost/'${CONFIG_GMETAD_COMPUTENODES}'/g' ${CONFIG_GMETAD}这代替了
sed -i 's/localhost/scccompute1 scccompute2/g' /etc/gmetad.conf我犯了错误
sed: -e expression #1, char 23: unterminated `s' command我看不出这里面有什么不对,但不经常和sed一起工作。
发布于 2016-04-21 11:32:02
你需要引用你的变量。注意sed命令是如何展开的:
sed -i 's/localhost/'scccompute1 scccompute2'/g' /etc/gmetad.conf这会创建多个选项,而不是使用sed脚本创建一个选项。相反,试着:
sed -i 's/localhost/'"${CONFIG_GMETAD_COMPUTENODES}"'/g' "${CONFIG_GMETAD}"将变量包含在双引号中会导致将整个字符串作为sed的单个参数处理,这正是您所希望的。当然,文件名周围还有引号,因为文件名可能包含特殊字符。通常,在bash中引用变量时总是引用它们。
注意,如果嵌入的变量包含斜杠或其他特殊字符,它可能会破坏您的脚本。因此,在将其输入sed之前,您可能需要做一些理智检查。
CONFIG_GMETAD_COMPUTENODES="${CONFIG_GMETAD_COMPUTENODES//[^a-z0-9 ]/}"如果bash是您的shell,这将删除所有非字母数字或空格的字符。
发布于 2016-04-21 11:33:37
这个问题来自于在bash中引用的话。
你应该用
sed -i "s/localhost/${CONFIG_GMETAD_COMPUTENODES}/g"
https://stackoverflow.com/questions/36768229
复制相似问题