#!/bin/bash
EXCLUDE=" --exclude 'images/' "
ALT="ssh -i id_rsa "
RSYNC='rsync -avn --progress --bwlimit=1000 '
$RSYNC $EXCLUDE -e "$ALT" user@hostname:/var/www/html/hostname .
そのかわり以下のように記述すればexcludeが適応されました。
$RSYNC --exclude 'images/' -e "$ALT" user@hostname:/var/www/html/hostname .
どのような原因がありますでしょうか。
よろしくお願いします。
EXCLUDE=" --exclude 'images/' " ... $RSYNC $EXCLUDE -e "$ALT" user@hostname:/var/www/html/hostname .
images/ をくくっているシングルクォートがシェル (bash) のパラメータ置換の対象にならないので、rsync コマンドは --exclude のパラメータとしてシングルクォート付きの 'images/' を受け取る。
シングルクォートがディレクトリ名についたディレクトリは存在してないから、--exclude の指定が効いてないように見える。
こんなシェルスクリプトを動かしてみると、理解できるかもしれない。
#!/bin/bash sub () { echo $# echo $* } EXCLUDE=" --exclude 'images/' " sub $EXCLUDE sub --exclude 'images/' sub "$EXCLUDE" eval "sub $EXCLUDE"
bash に -x オプションをつけて実行すると、もっと理解が深まるかも。
もうひとつ、分かりやすい例を。
シングルクォートを含んだメッセージを echo で表示したいときには、どう書く?
echo "That's right."
コメント(0件)