自宅の PC とサーバーの間でファイルを同期するためのスクリプトを作成しています。私が遭遇した問題の 1 つは、for ループを実行すると空白行が出力されることです。
それ以外はすべて問題ないようで、echo $REMOTE
すべてのファイルとそのフルパスが期待どおりにリストされます。引用を外したり、引用したり、EOFを「EOF」からEOFに変更したりしましたが、これまでのところ何も機能していません。
以下にスクリプトを示します。
function uploadDownload()
{
if [ "$1" == "d" ]; then
ssh -i ~/Dropbox/Business/aws/first.pem ubuntu@XXXX.194.202 << EOF
echo $REMOTE
for file in $REMOTE; do
echo $file
done
EOF
#scp -r -i ~/Dropbox/Business/aws/first.pem ubuntu@XXXX.194.202:$REMOTE $LOCAL
elif [ "$1" == "u" ]; then
scp -r -i ~/Dropbox/Business/aws/first.pem $LOCAL ubuntu@XXXX.194.202:$REMOTE
fi
}
if [ "$2" == "m" ]; then
if [ -z "$3" ]; then
echo "Please enter the local location of the files and provide an absolute path..."
read LOCAL
echo "Please enter the remote location of the files..."
read REMOTE
uploadDownload
else
LOCAL=$2
if [ -z "$4" ]; then
REMOTE=$3
else
REMOTE='ubuntu@XXXX.194.202:~/test/'
fi
uploadDownload
fi
else
LOCAL='/home/will/Dropbox/Business/aws/files/binaryhustle/'
REMOTE='/home/ubuntu/dev/binaryhustle/*'
uploadDownload $1
fi
編集: アドバイスに基づいて、uploadDownload 関数を編集しました。また、ループの外でテストしたところ、何も返されなかったことに注意してくださいecho "$REMOTE";
(引用符なしで何かを返す場合とは異なります)。
function uploadDownload()
{
if [ "$1" == "d" ]; then
ssh -i ~/Dropbox/Business/aws/first.pem ubuntu@54.252.194.202 << EOF
for file in "/home/ubuntu/dev/binaryhustle"; do
echo $file
done
EOF
#scp -r -i ~/Dropbox/Business/aws/first.pem ubuntu@54.252.194.202:$REMOTE $LOCAL
elif [ "$1" == "u" ]; then
scp -r -i ~/Dropbox/Business/aws/first.pem $LOCAL ubuntu@54.252.194.202:$REMOTE
fi
}