스크립트 예상 - 변수와 함께 파일 이름 보내기

스크립트 예상 - 변수와 함께 파일 이름 보내기

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

관련 정보