#bash #sed #cp
#bash #sed #cp
Вопрос:
У меня возникли некоторые проблемы с моим сценарием bash. Конец моего файла не работает, но все команды работают вне файла. У меня есть две строки в качестве аргумента $1 и $ 2. $ acl_line и $ usebackend_line — это числа, и они хороши.
Вот мой конечный файл :
sed -i "$((acl_line 1))i tacltt is_$2_$1tthdr_com(host)t-i $2.$1" /my_doc/haproxy/haproxy.cfg
sed -i "$((usebackend_line 1))i tuse_backendt$2_$1tif is_$2_$1" /my_doc/haproxy/haproxy.cfg
echo -en "nbackend $2_$1ntserver $2_$1 163.172.167.52:$3 maxconn 1024" >> /my_doc/haproxy/haproxy.cfg
cp -r "./model/*" "./script/lp_domains/$1/$2/"
sed -i 's/lp_ports/$ports/g' "./script/lp_domains/$1/$2/my_doc.yml"
sed -i 's/lp_name/$2-$1/g' "./script/lp_domains/$1/$2/my_doc.yml"
Спасибо за ваши ответы 🙂
Комментарии:
1. в последних двух командах sed
$ports
и$2-$1
должны быть заменены как переменные bash или$
фактически являются частью строки замены?
Ответ №1:
Если $1
и $2
должны быть интерполированы, вы не можете использовать одинарные кавычки.
Более того, копирование файла и его последующее выполнение sed -i
является расточительным и подверженным ошибкам. Просто запустите sed
и выполните свои замены одновременно.
sed -i -e "$((acl_line 1))i tacltt is_$2_$1tthdr_com(host)t-i $2.$1"
-e "$((usebackend_line 1))i tuse_backendt$2_$1tif is_$2_$1" /my_doc/haproxy/haproxy.cfg
-e "$a
backend $2_$1ntserver $2_$1 163.172.167.52:$3 maxconn 1024" /my_doc/haproxy/haproxy.cfg
# remove ./model/my_doc.yml; instead have a template ./my_doc.yml.in
cp -r "./model/*" "./script/lp_domains/$1/$2/"
sed -e "s/lp_ports/$ports/g" -e "s/lp_name/$2-$1/g"
my_doc.yml.in >"./script/lp_domains/$1/$2/my_doc.yml"
(Вероятно, вам следует сделать что-то подобное с haproxy.cfg.in
actually.)
Ответ №2:
Я исправил свои ошибки. Это были просто ошибки разрешений, Sed создает некоторые временные файлы, поэтому я добавляю разрешения своему пользователю. Спасибо за вашу помощь!