SFTP 서버에서 최신 파일을 복사하는 스크립트를 만들고 싶습니다. 이를 위해 이름을 가져와 파일에 넣는 스크립트를 만들었습니다.
이제 다른 스크립트를 만들어 이름이 있는 최신 파일을 다운로드하려고 하는데 파일 내용을 변수에 전달한 다음 파일을 다운로드하는 데 어려움을 겪고 있습니다.
#!/bin/bash
set name "testnamefromfile"
expect << 'EOS'
spawn sftp -P 2222 [email protected]:/var/log/datarecord
expect "[email protected]'s password:"
send "admin\n"
expect "sftp>"
send "get $name\r"
expect "sftp>"
send "bye\n"
EOS
이것은 내 스크립트입니다. 파일의 내용을 $name
변수에 할당하는 방법은 무엇입니까? 파일을 다운로드하는 방법은 무엇입니까?
이 스크립트를 실행하면 다음 오류가 발생합니다.
sftp> can't read "name": no such variable
while executing
"send "get $name\r""
답변1
귀하의 스크립트에는
set name "testnamefromfile"
그러나 이는 변수를 $1
로 설정 name
하고 변수를 $2
로 설정합니다 testnamefromfile
.
그럼 거기 있어요
expect << 'EOS'
인용 한 대로 'EOS'
"heredoc"에서는 변수 대체가 발생하지 않습니다.
다음이 더 잘 작동할 수 있습니다(테스트되지 않음, 비밀번호를 보낼 때 \n을 \r로 변경).
#!/bin/sh
name="testnamefromfile"
expect << EOS
spawn sftp -P 2222 [email protected]:/var/log/datarecord
expect "[email protected]'s password:"
send "admin\r"
expect "sftp>"
send "get $name\r"
expect "sftp>"
send "bye\n"
EOS