FTP "put"은 쉘 스크립트에서 실행할 때 파일을 원격 호스트에 복사하지 않지만 수동으로 실행할 때는 복사합니다.

FTP "put"은 쉘 스크립트에서 실행할 때 파일을 원격 호스트에 복사하지 않지만 수동으로 실행할 때는 복사합니다.
ftp -n ${FTP_HOST} << STOP
    user ${FTP_USERNAME} ${FTP_PASSWORD}

    binary
    lcd ${FTP_FROM_DIR}
    cd ${FTP_TO_DIR}
    put ${reportFileName}   
STOP

내 코드는 다음과 같습니다. 파일을 원격 호스트에 성공적으로 복사하지 못했지만 수동으로 사용하면 파일을 원격 호스트에 성공적으로 복사합니다.

스크립트에서 실행하면 콘솔에 "(로컬 파일) 사용법: 로컬 파일 원격 파일 넣기"가 나타납니다.

무엇이 문제일까요?

답변1

나는 당신의 문제 중 일부가 구분 기호를 구성하는 방식에 있다고 생각합니다. 다음과 같이 시도해 보세요.

$ ftp -n ${FTP_HOST} << STOP
user ${FTP_USERNAME} ${FTP_PASSWORD}

binary
lcd ${FTP_FROM_DIR}
cd ${FTP_TO_DIR}
put ${reportFileName}   
STOP

명령에서 이러한 공백/탭을 실제로 사용하려면 다음 형식의 heredoc로 변경해야 합니다.

$ ftp -n ${FTP_HOST} <<-STOP
    user ${FTP_USERNAME} ${FTP_PASSWORD}

    binary
    lcd ${FTP_FROM_DIR}
    cd ${FTP_TO_DIR}
    put ${reportFileName}   
STOP

구분된 문서에 공백/탭이 있을 때마다 for를 사용하여 <<-그 안에 포함된 명령을 실행하기 전에 선행 공백/탭을 제거하도록 쉘에 지시해야 합니다.

에코 사용에 대한 사이드바

스크립트에서 변수를 구문 분석하고 실수로 이를 사용하여 echo메시지를 인쇄하는 경우 관심 있는 문자열보다 더 많은 것을 얻는 경우가 많습니다. echo후행 개행 문자도 포함됩니다. 이 예에서 확인할 수 있습니다.

$ echo $(echo hi) | hexdump -C
00000000  68 69 0a                                          |hi.|
00000003

0a개행 문자의 ASCII 코드 입니다 . 따라서 -n이 동작을 비활성화하려면 일반적으로 다음 스위치를 사용해야 합니다 echo.

$ echo -n $(echo hi) | hexdump -C
00000000  68 69                                             |hi|
00000002

또는 printf.

인용하다

관련 정보