한 줄을 사용하여 여러 명령을 sftp로 보내는 방법


14

다음 명령은 sftp한 줄 을 사용하여 하나의 명령을 보냅니다 .

sftp -o PasswordAuthentication=no user@host" <<<"lcd /home"

sftp한 줄 을 사용하여 여러 줄을 보내는 방법 캐리지 리턴을 삽입하거나이를 달성하기위한 방법이 있습니까? 예를 들면 다음과 같습니다.

sftp -o PasswordAuthentication=no user@host" <<<"lcd /home\n cd /myhome\n get file"

sftp -b외부 파일 나열 명령이로드 되는 옵션을 사용하지 않는 것이 좋습니다 .

답변:


12

here-string ( <<<) 구문에서 쉘이 같다고 생각 bash하므로 백 슬래시 이스케이프 문자 ( $'') 와 함께 문자열을 사용할 수도 있습니다 .

sftp -o PasswordAuthentication=no user@host <<< $'lcd /home\n cd /myhome\n get file'

휴대용 대안은 다음과 같습니다.

sftp -o PasswordAuthentication=no user@host <<END
lcd /home
cd /myhome
get file
END

1
<<<zsh에 의해 처음 소개되었지만 (에서 영감을 받았음 rc) 나중에 ksh93에 추가 된 다음 bash가 추가되었습니다.
Stéphane Chazelas

감사합니다, @StephaneChazelas. 난 정말 내 강화해야 할 zsh능력을.
manatwork

8

-b/--batchfile적절한 오류 처리를 하려면 옵션을 사용하십시오 .

 printf '%s\n' 'lcd /home' 'cd /myhome' 'get file' | sftp -b - user@host

1
변수를 사용하려면 '을 "로 변경하십시오
Radnaskela Samot

2

예, 당신은 사용할 수 있습니다 echo -e

echo -e "lcd /home\ncd /myhome\nget file" | sftp user@host

3
echo매우 비표준입니다- echo -e모든 곳에서 동일하게 작동하지 않으므로 먼저 확인해야합니다. 또는 printf휴대 성이 훨씬 뛰어나 어디서나 동일하게 작동해야합니다.
jw013

1

-b배치 파일을 디스크에 쓰는 것을 피하는 옵션을 피할 필요는 없습니다 . 사용 공정 대체하는 것은 당신이 즉시 일괄 처리를 생성 할 수 있습니다.

batch() {
  echo lcd /home
  echo cd /myhome
  echo get file
}

sftp -b <(batch) -o PasswordAuthentication=no user@host

0

기본 sftp 명령 사용

sftp -o PasswordAuthentication = 사용자 @ 호스트 없음 : / home / myhome / file


당신이 통보하지 않았다 것은 그 것이었다 lcdcd다른 일을. 당신은 존재하지 않는 것으로 경로를 결합했습니다.
underscore_d

0

Mybru, 다음과 같이 명령을 mos 파이프 할 수 있습니다.

echo '
    lcd /home
    cd /myhome
    get file
' | sftp -o PasswordAuthentication=no user@host
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.