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)
我想 运行 以编程方式更改参数的 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)