David Gidony
David Gidony

Reputation: 1283

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

i want to run a sed command with programatically with changing parameters. the thing is that i cant find the correct syntax to do so. i want to configure a conf file with this and change a dir path to another.

i'm currently using:

RESULT=$("sed 's/--ROOT_DIR--/${root_inst_dir}/g' ${root_inst_dir}/${tool_name}/etc/${tool_name}.conf > ${SOURCE_DIR}/${tool_name}.conf")

and i get the error message:

./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

the ">" is not working for some reason.

what am i doing wrong? or what is the best way to do this ?

UPDATE

i drooped the result variable and now running this:

(sed 's/--ROOT_DIR--/$root_inst_dir/g' ${root_inst_dir}/${tool_name}/etc/${tool_name}.conf) > ${SOURCE_DIR}/${tool_name}.conf

the new file is being created in > ${SOURCE_DIR}/${tool_name}.conf, but the search/replace is happening literally and not as a variable...

thanks.

Upvotes: 0

Views: 241

Answers (1)

KamilCuk
KamilCuk

Reputation: 141698

Putting " inside parenthesis will result in bash wanting to execute a command named exactly:

sed 's/--ROOT_DIR--/${root_inst_dir}/g' ${root_inst_dir}/${tool_name}/etc/${tool_name}.conf > ${SOURCE_DIR}/${tool_name}.conf"

Such command does not exist on your system. Probably you intended to put " outside $(...):

RESULT="$(sed 's/--ROOT_DIR--/${root_inst_dir}/g' ${root_inst_dir}/${tool_name}/etc/${tool_name}.conf > ${SOURCE_DIR}/${tool_name}.conf)"

Better way, if you don't need the RESULT variable and if you want to properly escape root_inst_dir variable:

sed 's#--ROOT_DIR--#'"${root_inst_dir}"'#g' "${root_inst_dir}/${tool_name}/etc/${tool_name}.conf" > "${SOURCE_DIR}/${tool_name}.conf"

Or if you need RESULT variable:

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)

Upvotes: 3

Related Questions