我想以编程方式运行sed命令并更改参数。 问题是我无法找到正确的语法。 我想用这个和配置一个conf文件 将dir路径更改为另一个。
我目前正在使用:
RESULT=$("sed 's/--ROOT_DIR--/${root_inst_dir}/g' ${root_inst_dir}/${tool_name}/etc/${tool_name}.conf > ${SOURCE_DIR}/${tool_name}.conf")
我收到错误消息:
./change_tst.sh: line 7: sed 's/--ROOT_DIR--//home/test_dir/g' /home/tst/conf.conf > /home/script_tst/conf.conf: No such file or directory
">"由于某种原因不起作用。
我在做错了什么?或者最好的方法是什么?更新
我下垂了结果变量,然后运行它:
(sed 's/--ROOT_DIR--/$root_inst_dir/g' ${root_inst_dir}/${tool_name}/etc/${tool_name}.conf) > ${SOURCE_DIR}/${tool_name}.conf
正在>中创建新文件$ {SOURCE_DIR} / $ {} tool_name的.conf, 但搜索/替换是字面上发生的而不是变量...
感谢。
答案 0 :(得分:3)
在括号内放置"
将导致bash想要执行一个名为的命令:
sed 's/--ROOT_DIR--/${root_inst_dir}/g' ${root_inst_dir}/${tool_name}/etc/${tool_name}.conf > ${SOURCE_DIR}/${tool_name}.conf"
您的系统上不存在此类命令。
您可能打算将"
放在$(...)
之外:
RESULT="$(sed 's/--ROOT_DIR--/${root_inst_dir}/g' ${root_inst_dir}/${tool_name}/etc/${tool_name}.conf > ${SOURCE_DIR}/${tool_name}.conf)"
更好的方法,如果你不需要RESULT变量,并且你想要正确地转义root_inst_dir
变量:
sed 's#--ROOT_DIR--#'"${root_inst_dir}"'#g' "${root_inst_dir}/${tool_name}/etc/${tool_name}.conf" > "${SOURCE_DIR}/${tool_name}.conf"
或者如果你需要RESULT变量:
sed 's#--ROOT_DIR--#'"${root_inst_dir}"'#g' "${root_inst_dir}/${tool_name}/etc/${tool_name}.conf" > "${SOURCE_DIR}/${tool_name}.conf"
RESULT=$(cat ${SOURCE_DIR}/${tool_name}.conf)