변수에 디렉토리를 저장한 후 쉘 스크립트에 문제가 있습니다.

변수에 디렉토리를 저장한 후 쉘 스크립트에 문제가 있습니다.

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/"

관련 정보