оболочка sh, перенаправляющая подоболочку в файл, не может найти правильный синтаксис - PullRequest
0 голосов
/ 17 мая 2018

Я хочу запустить команду sed с программно изменяющимися параметрами.дело в том, что я не могу найти правильный синтаксис для этого.я хочу настроить файл conf с этим и изменить путь 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.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, но поиск / замена происходит буквально, а не как переменная ...

спасибо.

1 Ответ

0 голосов
/ 17 мая 2018

Помещение " в круглые скобки приведет к тому, что 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)
...