Linux sh shell将子shell重定向到文件,can';找不到正确的语法
我想运行一个sed命令,以编程方式更改参数。 问题是我找不到这样做的正确语法。 我想用这个和配置一个conf文件 将一个dir路径更改为另一个dir路径 我目前正在使用:Linux sh shell将子shell重定向到文件,can';找不到正确的语法,linux,bash,shell,sed,subshell,Linux,Bash,Shell,Sed,Subshell,我想运行一个sed命令,以编程方式更改参数。 问题是我找不到这样做的正确语法。 我想用这个和配置一个conf文件 将一个dir路径更改为另一个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
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\u DIR}/${tool\u 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"
您的系统上不存在此命令。
可能您打算将“
置于$(…)
之外:
更好的方法是,如果不需要结果变量,并且希望正确转义root\u inst\u dir
变量:
sed 's#--ROOT_DIR--#'"${root_inst_dir}"'#g' "${root_inst_dir}/${tool_name}/etc/${tool_name}.conf" > "${SOURCE_DIR}/${tool_name}.conf"
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 's#--ROOT_DIR--#'"${root_inst_dir}"'#g' "${root_inst_dir}/${tool_name}/etc/${tool_name}.conf" > "${SOURCE_DIR}/${tool_name}.conf"
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)
将“
放在括号内将导致bash希望执行一个名为:
sed 's/--ROOT_DIR--/${root_inst_dir}/g' ${root_inst_dir}/${tool_name}/etc/${tool_name}.conf > ${SOURCE_DIR}/${tool_name}.conf"
您的系统上不存在此命令。
可能您打算将“
置于$(…)
之外:
更好的方法是,如果不需要结果变量,并且希望正确转义root\u inst\u dir
变量:
sed 's#--ROOT_DIR--#'"${root_inst_dir}"'#g' "${root_inst_dir}/${tool_name}/etc/${tool_name}.conf" > "${SOURCE_DIR}/${tool_name}.conf"
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 's#--ROOT_DIR--#'"${root_inst_dir}"'#g' "${root_inst_dir}/${tool_name}/etc/${tool_name}.conf" > "${SOURCE_DIR}/${tool_name}.conf"
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命令的输出或其退出状态或其他信息?您的问题需要包括简明的、可测试的示例输入和预期的输出,以便我们能够帮助您。sed命令的输出应该通过“>”重定向到文件,结果我希望得到退出状态it's here:)仔细检查。即使不存在,它也应该创建它,但它确实存在。我认为目录脚本不存在。您希望在结果中存储什么?sed命令的输出或其退出状态或其他信息?您的问题包括简明、可测试的示例输入和预期输出,以便我们可以帮助您。sed命令的输出应通过“>”重定向到文件,结果我希望得到退出状态注意,绝对没有理由写入result=“$(cmd>redirected)”
,因为它保证将空字符串分配给结果。您不妨编写RESULT=“”;cmd>重定向代码>!你可以做RESULT=$(cmd | tee redirected)
-虽然我不认为这比这个答案中的建议更好,但是没有结果我可以活下去,但是你的例子不起作用,我试过:(sed's/--ROOT\u DIR--/$ROOT\u inst\u DIR/g'${ROOT\u inst\u DIR}/${tool\u name}.conf,这是可行的,但“”中的/search/replace值是按字面意思而不是作为变量。。。如何转义“”中的变量?如果变量root\u inst\u dir
包含/
字符,则sed实用程序将其解析为命令分隔符。尝试使用
作为分隔符,如sed的#--ROOT#u DIR--“$ROOT#u inst#u DIR”'#g'
(并确保变量ROOT#u inst#u DIR不包含任何
字符。如果包含,它们不需要进行转义以使sed实用程序工作)@KamilCuk,你是我的英雄:)非常感谢你。。。在你的答案上更新此评论,我会将其标记为“一”。再次感谢!请注意,绝对没有理由写入RESULT=“$(cmd>redirected)”
,因为它保证将空字符串分配给RESULT。您不妨编写RESULT=“”;cmd>重定向代码>!你可以做RESULT=$(cmd | tee redirected)
-虽然我不认为这比这个答案中的建议更好,但是没有结果我可以活下去,但是你的例子不起作用,我试过:(sed's/--ROOT\u DIR--/$ROOT\u inst\u DIR/g'${ROOT\u inst\u DIR}/${tool\u name}.conf,这是可行的,但“”中的/search/replace值是按字面意思而不是作为变量。。。如何转义“”中的变量?如果变量root\u inst\u dir
包含/
字符,则sed实用程序将其解析为命令分隔符。尝试使用
作为分隔符,如sed的#--ROOT#u DIR--“$ROOT#u inst#u DIR”'#g'
(并确保变量ROOT#u inst#u DIR不包含任何
字符。如果包含,它们不需要进行转义以使sed实用程序工作)@KamilCuk,你是我的英雄:)非常感谢你。。。在你的答案上更新此评论,我会将其标记为“一”。再次感谢!