Bash 스크립트의 EOF 문은 IF 문에서 실행되지 않습니다.

Bash 스크립트의 EOF 문은 IF 문에서 실행되지 않습니다.

내 문법에 어떤 문제가 있는지 궁금합니다.

이 bash 스크립트를 실행하면 예상대로 작동하고 모든 명령이 실행됩니다.

sftp -i ~/.ssh/my_private_key $username@$host <<EOF
lcd /home/documents
get *
bye
EOF

그러나 IF 안에 EOF를 넣으려고 하면 실패하게 됩니다.

sftp -i ~/.ssh/my_private_key $username@$host

if [[ $? != 0 ]]; then
    echo "SFTP connection failed to establish."
    exit 10
else <<-EOF
    lcd /home/documents
    get *
    bye
    EOF
    echo "Files moved and connection closed."
fi

exit 0

일어나는 일은 터미널에 "Connected to $host" 메시지가 표시되고 입력을 기다리는 것뿐입니다. 내가 그런 것을 입력하거나 명령을 실행하면 ls마지막 pwd으로 입력한 것이 bye연결을 닫고 인쇄 "Connection closed."하지만 EOF의 명령은 언제든지 실행되지 않습니다.

답변1

sftp리디렉션은 명령 에 적용되어야 하며 if 다음과 같아야 합니다.

if sftp -i ~/.ssh/my_private_key $username@$host  <<-EOF
lcd /home/documents
get *
bye
EOF
then
    echo "Files moved and connection closed."
else
    echo "SFTP connection failed to establish."
    exit 10
fi

결국 연결이 안되면 명령을 보내든 안 보내든 상관없으니 어쨌든 보내세요.

관련 정보