sh shell 将 subshell 重定向到文件,找不到正确的语法

sh shell redirecting a subshell to file, can't find the right syntax

我想 运行 以编程方式更改参数的 sed 命令。 问题是我找不到正确的语法来这样做。 我想用这个配置一个conf文件 将目录路径更改为另一个。

我目前正在使用:

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 中创建新文件, 但是 search/replace 是按字面意思发生的,而不是作为一个变量...

谢谢。

" 放在括号内将导致 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)