2016-10-12 20 views
0

私のbashスクリプトにいくつかの問題があります。ファイルの最後は機能しませんが、すべてのコマンドはファイルの外で動作します。私は引数$ 1と$ 2として2つの文字列を持っています。 $ acl_lineと$ usebackend_lineは数字であり、良いものです。ここでBashスクリプト - 一部のコマンドがshファイルで動作しない

が私の最後のファイルである:$1$2を補間する必要がある場合は、あなたのanwsersため

sed -i "$((acl_line+1))i \ \tacl\t\t is_$2_$1\t\thdr_com(host)\t-i $2.$1" /my_doc/haproxy/haproxy.cfg 
sed -i "$((usebackend_line+1))i \ \tuse_backend\t$2_$1\tif is_$2_$1" /my_doc/haproxy/haproxy.cfg 
echo -en "\nbackend $2_$1\n\tserver $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" 

感謝:)

+0

最後の2つのsedコマンドで '$ ports'と' $ 2- $ 1'をbash変数に置き換える必要があります。あるいは '$'は実際に置換文字列の一部ですか? – Sundeep

答えて

1

、あなたは単一引用符を使用することはできません。

さらに、ファイルをコピーしてからsed -iを実行すると、無駄でエラーが発生しやすくなります。 sedを実行して、同時に置換を実行してください。

sed -i -e "$((acl_line+1))i \ \tacl\t\t is_$2_$1\t\thdr_com(host)\t-i $2.$1" \ 
    -e "$((usebackend_line+1))i \ \tuse_backend\t$2_$1\tif is_$2_$1" /my_doc/haproxy/haproxy.cfg \ 
    -e "\$a\ 
backend $2_$1\n\tserver $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と似た何かを行う必要があります。)

0

私は自分のエラーを修正しました。それは私のユーザーに権限を追加するので、Sedは一時的なファイルを作成するだけのアクセス許可のエラーでした。ご協力いただきありがとうございます !

関連する問題