0
bashの簡単なスクリプトを手伝ってください。私は多くの仮想ホストを持つ1台のサーバーをバックアップするためのスクリプトを書いていました。このスクリプトは、1つの設定ファイルを除いてうまく動作します。なぜdir_for_bckp = $ '/ホーム/ - スクリプトは結果で、このファイルを解析するときには、デバッグモードで問題のファイルのbash。サイクル中のファイルを解析するときのExataシンボル
for n in `find /etc/nginx/conf.d/ -type f -name *.conf`
do
dir_for_bckp=`cat $n | awk '{ print $1,$2 }' | egrep "^root" | awk '{ print $2 }' | sed 's/\;//g'`
name_bckp=`echo $dir_for_bckp | sed 's/\//\_/g'`
tar -zcvf $tmp_dir/backup/$name_bckp.tar.gz $dir_for_bckp/ 1>/dev/null
done
出力
+ for n in '`find /etc/nginx/conf.d/ -type f -name *.conf`'
++ cat /etc/nginx/conf.d/gitlab.conf
++ awk '{ print $1,$2 }'
++ awk '{ print $2 }'
++ sed 's/\;//g'
++ egrep '^root'
+ dir_for_bckp=$'/home/git/gitlab/public\r'
++ sed 's/\//\_/g'
+ name_bckp=$'_home_git_gitlab_public\r'
に私の質問を解析するいくつかの余分なシンボル サイクルが追加されますgit/gitlab/public \ r '? dir_for_bckp =/home/git/gitlab/public 他の設定ファイルの解析は大丈夫です! 例
+ for n in '`find /etc/nginx/conf.d/ -type f -name *.conf`'
++ cat /etc/nginx/conf.d/site-com.conf
++ awk '{ print $1,$2 }'
++ egrep '^root'
++ sed 's/\;//g'
++ awk '{ print $2 }'
+ dir_for_bckp=/home/site.com/html
++ sed 's/\//\_/g'
+ name_bckp=_home_site.com_html
私は手動で問題のあるファイルもOK出力を解析した場合。
cat /etc/nginx/conf.d/gitlab.conf | awk '{ print $1,$2 }' | egrep "^root" | awk '{ print $2 }' | sed 's/\;//g'
/home/git/gitlab/public
注意 'cat $ n | awk '{プリント$ 1、$ 2}' | egrep "^ root" | awk '{print $ 2}' | sedの/ \; // g''は非効率的です。あなたは[\ [役に立たないcat \の使用]](http://porkmail.org/era/unix/award.html)を持っています。 1つの 'awk'スクリプトを使ってオブジェクト全体を完成させてみてください。それは可能ですが、あなたのために書くのは少し怠惰だと確信しています; – sjsam
Google UUOC、廃止されたバッククォート、変数の引用、そしてChris Johnsonによるシェルスクリプトレシピの本を読んでください。 –