Ответ 1
Учитывая, что sed
кажется, что вы используете команду delete line
(d
), вы можете захотеть вывести эту команду, чтобы увидеть, что на самом деле находится в этой переменной среды:
for fl in $(S_convertPath ${RESOURCE_DIR}/db)/db.changelog-*xml; do
echo sed -i "s/HOSTNAME/${PSM_SERVER_ADDRESS}/g" $fl
done
Хорошая вероятность того, что PSM_SERVER_ADDRESS
искажает вашу команду sed
(и, возможно, ее нужно обработать, чтобы очистить ее). Один из способов сделать это (при условии, что у вас достаточно недавний sed
) будет использование разделителей, которые не отображаются в переменной среды, например:
sed -i "s?HOSTNAME?${PSM_SERVER_ADDRESS}?g" $fl
Поскольку вы приняли этот ответ, я также могу добавить разрешение для дополнительной проблемы, которую вы нашли. Похоже, что BSD sed
, в отличие от Linux, требует, чтобы вы предоставили расширение опции -i
. Итак, в то время как Linux позволяет:
sed -i "sed-command"
для редактирования на месте, вариант BSD должен иметь:
sed -i "" "sed-command"
с пустым резервным суффиксом.
Без этого sed
может использовать вашу команду как расширение и ваше первое имя файла в качестве команды.