gpt4 book ai didi

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

转载 作者:塔克拉玛干 更新时间:2023-11-03 02:03:42 24 4
gpt4 key购买 nike

我想通过更改参数以编程方式运行 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 中创建新文件,但是搜索/替换是按字面意思发生的,而不是作为变量...

谢谢。

最佳答案

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

关于linux - sh shell 将子 shell 重定向到文件,找不到正确的语法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50389487/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com