0

次の簡単な rsync スクリプトを考えてみてください。

#!/bin/bash
PROJECT="$1"
USER=stef
LOCAL_DIR="~/drupal-files/"

REMOTE_HOST="hostname.com"
REMOTE_PROJECTS_PATH=""

# Should not have anything to change below
PROJECT_LIST="proj1 proj2 proj3 quit"

echo "/nSelect project you wish to rsync\n\n"

select PROJECT in $PROJECT_LIST
do
  if [ "$PROJECT" = "quit" ]; then
   echo
   echo  "Quitting $0"
   echo
   exit
fi
echo "Rsynching $PROJECT from $REMOTE_HOST into" $LOCAL_DIR$PROJECT
rsync -avzrvP $USER@$REMOTE_HOST:/var/projects/$PROJECT/ $LOCAL_DIR$PROJECT
done
echo "Rsync complete."
exit;

rsync コマンドで設定される変数$LOCALDIR$PROJECTには、常にスクリプト パスが含まれます。

出力:

Rsynching casa from hostname.com.com into ~/drupal-files/casa
opening connection using: ssh -l stef hostname.com rsync --server --sender -vvlogDtprz                   e.iLsf . /var/groupe_tva/casa/
receiving incremental file list
rsync: mkdir "/home/stef/bin/~/drupal-files/proj1" failed: No such file or directory (2)
rsync error: error in file IO (code 11) at main.c(605) [Receiver=3.0.9]

の行にmkdirは /home/stef/bin を含めないでください。bash がスクリプトの実行中のディレクトリを変数に追加するのはなぜですか?

ありがとう

4

1 に答える 1

4
LOCAL_DIR="~/drupal-files/"

文字列は引用符で囲まれているため、パス名が展開され、変数にはリテラル文字列が含まれます。

引用符を削除します。

$ x="~/test"; echo $x
~/test
$ x=~/test; echo $x
/home/user/test
于 2013-06-07T22:41:38.520 に答える