Cách gửi nhiều lệnh đến sftp bằng một dòng


13

Lệnh sau sẽ gửi một lệnh để sftpsử dụng một dòng:

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

Làm thế nào để gửi nhiều dòng để sftpsử dụng một dòng. Có cách nào để chèn lợi nhuận vận chuyển hoặc một cái gì đó để đạt được điều này, ví dụ:

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

Ý tưởng là KHÔNG sử dụng sftp -btùy chọn nơi các lệnh liệt kê tệp bên ngoài được tải.

Câu trả lời:


12

Từ <<<cú pháp here-string ( ) mà bạn đã sử dụng, tôi đoán shell của bạn là bash, vì vậy bạn cũng có thể sử dụng chuỗi với các ký tự thoát dấu gạch chéo ngược ( $''):

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

Giải pháp thay thế di động có ở đây - tài liệu:

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

1
<<<được giới thiệu đầu tiên bởi zsh (mặc dù được truyền cảm hứng bởi rc) và sau đó được thêm vào ksh93 và sau đó bash.
Stéphane Chazelas

Cảm ơn bạn, @StephaneChazelas. Tôi thực sự cần phải tăng cường zshkỹ năng của tôi .
manatwork

8

Sử dụng -b/--batchfiletùy chọn để xử lý lỗi thích hợp:

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

1
Để sử dụng các biến thay đổi 'thành "
Radnaskela Samot

2

Có, bạn chỉ có thể sử dụng echo -e

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

3
echorất không chuẩn - echo -ekhông hoạt động giống nhau ở mọi nơi, vì vậy bạn phải kiểm tra trước. Ngoài ra, chỉ cần sử dụng printfđó là di động hơn nhiều và nên hoạt động như nhau ở mọi nơi.
jw013

1

Không cần thiết phải tránh -btùy chọn để tránh ghi tệp bó vào đĩa. Sử dụng thay thế quá trình, bạn có thể tạo ra các lô một cách nhanh chóng.

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

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

0

Sử dụng lệnh sftp riêng

sftp -o PasswordAuthentication = không có người dùng @ host: / home / myhome / file


Những gì bạn đã không nhận thấy là điều đó lcdcdlàm những điều khác nhau. Bạn vừa kết hợp các đường dẫn vào một cái gì đó sẽ không tồn tại.
gạch dưới

0

Mybru, bạn có thể điều khiển các lệnh của mình như vậy:

echo '
    lcd /home
    cd /myhome
    get file
' | sftp -o PasswordAuthentication=no user@host
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.