Tôi muốn sử dụng expect
để chạy một lệnh đơn giản cat /tmp/id_rsa.pub
qua ssh.sử dụng mong đợi để sinh ra lệnh với đối số có chứa dấu cách
Trong một vỏ, tôi có thể chạy này wo vấn đề, (với tay đưa vào mật khẩu)
ssh [email protected] 'cat /tmp/id_rsa.pub'
tôi muốn tự động hoá này với expect
. Mã số của tôi expect
là,
#!/usr/bin/expect
eval spawn ssh [email protected] 'cat /tmp/id_rsa.pub'
expect "password:"
send "123456"
expect eof
Nó ném lỗi bash: cat /tmp/id_rsa.pub: no such file or directory
. có vẻ rất lạ với tôi. Nguyên nhân có thể là gì?
Chỉnh sửa: sau một số thử nghiệm, tôi thấy điều này là phổ biến, không chỉ trong trường hợp của cat
. Nếu đối số để sinh ra lệnh là với không gian (ngay cả khi nó trong dấu ngoặc kép), nó sẽ có vấn đề. Ví dụ, thay thế cat /tmp/id_rsa.pub
với các lệnh khác với không gian, giống như
eval spawn ssh [email protected] 'which java'
nó than phiền với bash: which java: command not found
. Nhưng nếu thay thế mà với pwd
, như
eval spawn ssh [email protected] 'pwd'
nó hoạt động tốt.
Bạn đã thử xóa dấu nháy đơn xung quanh 'đối số lệnh'? Có vẻ như gốc của vấn đề là nó đang cố gắng giải thích toàn bộ chuỗi được trích dẫn như tên của một lệnh, thay vì tách nó thành lệnh và đối số ... – twalberg
@twalberg đang hoạt động. Tôi cũng đã thử báo giá đôi, wo/vấn đề là tốt. Chỉ cần ra khỏi tò mò, u có thể giải thích một chút những gì đặc biệt về dấu nháy đơn? – Richard
Tôi phải đào các tài liệu 'mong đợi' để xem những gì nó nói - không biết ngoài đỉnh đầu của tôi. Tôi đề xuất rằng dựa trên cú pháp của thông báo lỗi cụ thể mà bạn đang nhận được ... – twalberg