วิธีการส่งคำสั่งหลายคำสั่งเพื่อ 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 แล้วทุบตี
Stéphane Chazelas

ขอบคุณ @StephaneChazelas ฉันต้องการเสริมzshทักษะของฉัน
จัดการ

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 = ไม่มีผู้ใช้ @ host: / home / myhome / file


สิ่งที่คุณไม่ได้แจ้งให้ทราบล่วงหน้าได้ว่าlcdและcdทำสิ่งที่แตกต่างกัน คุณเพิ่งรวมเส้นทางเข้ากับสิ่งที่ไม่มีอยู่
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.