変数にディレクトリを保存した後、シェルスクリプトに問題があります。

変数にディレクトリを保存した後、シェルスクリプトに問題があります。

FTPはサーバーに接続していますが、エラーが発生しました。 -

Enter if the env is dev or test or prod:
test
Please enter the id no :
xxxxxxx
Connected to xxxx
220 (vsFTPd 2.2.2)
331 Please specify the password.
230 Login successful.
**?Invalid command
?Invalid command
?Invalid command
?Invalid command
?Invalid command**
200 PORT command successful. Consider using PASV.

以下はシェルスクリプトです -

#!/bin/bash
echo "Enter if the env is dev or test or prod:"
while :
do
read -r INPUT_STRING
case $INPUT_STRING in
    test | TEST)
        echo "Please enter id no : "
        read -r input_variable
        if [[ ${#input_variable} -ne "7" ]]
        then
            echo "Please check id no given"
            exit 1
        fi
        HOST=XXX
        USER=XXX
        PASSWORD=XX
        ftp -inv $HOST <<- EOF
                user $USER $PASSWORD
                mypath='/test/$input_variable/destination/'
                if ! cd "$mypath"
                then
                    exit 1
                fi
                mput x.csv
EOF
                exit 1
    ;;
esac
done

答え1

最大の問題は、line settings変数を使用していると思いますmypath='/test/$input_variable/destination/'が、実際にはFTPセッション内で実行されていることです。

FTPコマンドの上に移動する必要があります。同じ理由でそこで確認できない条件も後で確認できます。

答え2

問題は、変数を設定しようとしていることです。~へここにある文書:

ftp -inv $HOST <<- EOF
    user $USER $PASSWORD
    mypath='/test/$input_variable/destination/'
    if ! cd "$mypath"
    then
        exit 1
    fi
    mput x.csv
EOF

それは動作しません。このセクションを次に変更します。

mypath="/test/$input_variable/destination/"
ftp -inv $HOST <<-_EOF_
    user $USER $PASSWORD
    cd "$mypath"
    mput x.csv
_EOF_

答え3

一重引用符を二重引用符に変更します。

変える:

mypath='/test/$input_variable/destination/'

使用:

mypath="/test/$input_variable/destination/"

関連情報