2016-09-06 5 views
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 
+0

注意 'cat $ n | awk '{プリント$ 1、$ 2}' | egrep "^ root" | awk '{print $ 2}' | sedの/ \; // g''は非効率的です。あなたは[\ [役に立たないcat \の使用]](http://porkmail.org/era/unix/award.html)を持っています。 1つの 'awk'スクリプトを使ってオブジェクト全体を完成させてみてください。それは可能ですが、あなたのために書くのは少し怠惰だと確信しています; – sjsam

+0

Google UUOC、廃止されたバッククォート、変数の引用、そしてChris Johnsonによるシェルスクリプトレシピの本を読んでください。 –

答えて

1

各行がないだけ\n\r\nで終わるすなわち、MSWINDOWSラインで作成された設定ファイルが終了するようです。ファイルを修正するにはfromdosまたはdos2unixを使用してください。

関連する問題