내 문법에 어떤 문제가 있는지 궁금합니다.
이 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
결국 연결이 안되면 명령을 보내든 안 보내든 상관없으니 어쨌든 보내세요.