2

自宅の 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
    }
4

3 に答える 3

2

$fileリモートサーバーに送信される前に展開される変数を引用してみてください。

            echo $file

            echo \$file

またはさらに良い

            echo \"\$file\"
于 2013-09-07T09:38:22.330 に答える