Сценарий Bash — некоторые команды не работают в файле sh

#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 создает некоторые временные файлы, поэтому я добавляю разрешения своему пользователю. Спасибо за вашу помощь!