Bir satır kullanarak sftp'ye birden fazla komut nasıl gönderilir


14

Aşağıdaki komut sftpbir satırı kullanmak için bir komut gönderir :

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

sftpBir satırı kullanarak birden çok satır nasıl gönderilir . Örneğin, şaryo iadeleri veya bunu başarmak için bir şey eklemenin bir yolu var mı:

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

Fikir, sftp -bharici bir dosya listeleme komutlarının yüklendiği seçeneği KULLANMAMAKTIR .

Yanıtlar:


12

Burada <<<kullandığınız string-) sözdiziminden kabuğunun olduğunu tahmin ediyorum bash, böylece ters eğik çizgiden kaçan karakterler ( $'') ile de dize kullanabilirsiniz :

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

Taşınabilir alternatif burada belgelidir:

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

1
<<<önce zsh tarafından (esinlenerek de olsa rc) tanıtıldı ve daha sonra ksh93 ve sonra bash'a eklendi.
Stéphane Chazelas

Teşekkürler @StephaneChazelas. Gerçekten zshyeteneklerimi güçlendirmem gerekiyor .
manatwork

8

-b/--batchfileHata işlemeyi düzgün yapmak için bu seçeneği kullanın :

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

1
Değişkenleri kullanmak için "olarak" değiştirin
Radnaskela Samot

2

Evet, sadece echo -e

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

3
echoçok standart dışı - echo -eher yerde aynı şekilde çalışmaz, bu yüzden önce kontrol etmeniz gerekir. Alternatif olarak, printfdaha taşınabilir olan ve her yerde aynı şekilde çalışması gereken kullanımı kullanın .
jw013

1

-bToplu iş dosyasını diske yazmaktan kaçınma seçeneğinden kaçınmak gerekli değildir . Süreç ikamesi kullanarak , toplu işi anında oluşturabilirsiniz.

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

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

0

Yerel sftp komutunu kullan

sftp -o PasswordAuthentication = kullanıcı yok @ host: / home / myhome / file


Fark etmediğin şey buydu lcdve cdfarklı şeyler yaptı. Sadece yolları var olmayacak bir şeyle birleştirdiniz.
underscore_d

0

Mybru, emirlerini şöyle yapabilirsin:

echo '
    lcd /home
    cd /myhome
    get file
' | sftp -o PasswordAuthentication=no user@host
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.