2012-06-30 30 views
5

Tôi đang cố viết một kịch bản để đăng nhập vào một số máy chủ từ xa và thực thi một kịch bản trong mỗi máy chủ. Tuy nhiên, tôi muốn chuyển một biến thông qua ssh. Một cái gì đó như thế này:chuyển các biến thông qua ssh

var="/home/dir/" 

    ssh -T $mchname <<'ENDSSH'  
    $var"run_script" <input> output &  
ENDSSH 

Thử nghiệm ngây thơ này không hoạt động ($ var chỉ đơn giản là null). Cú pháp chính xác sẽ là gì? Cảm ơn trước.

Trả lời

4

Xóa dấu ngoặc kép khỏi khoảng ENDSSH. Chúng ngăn chặn việc mở rộng các biến trong phạm vi here document.

+0

Ok, công trình này. Nhưng bây giờ điều khiển chỉ trở lại kịch bản chính một khi "run_script" được hoàn thành trong $ mchname (mặc dù tôi đang sử dụng '&'), đó không phải là những gì tôi muốn. Làm thế nào tôi có thể sửa chữa nó? Xin lỗi vì những câu hỏi cơ bản. Nếu bạn muốn, bạn có thể chỉ cho tôi một số hướng dẫn ssh nơi tôi có thể nhìn những thứ này lên. Cảm ơn. – user1477337

+0

@ user1477337: Dấu và có hiệu lực trên máy đích và chỉ có nghĩa là điều khiển trả về kịch bản chính nhanh hơn vì nó không phải chờ 'run_script' hoàn thành. Nhưng vì không có gì sau lệnh 'ssh' và tài liệu của nó ở đây nên kịch bản chính nên thoát ngay khi kết nối' ssh' được đóng gần như ngay lập tức. Tuy nhiên, nếu có một số lý do mà bạn cần, bạn có thể thử tiền tố 'exec' đến lệnh' ssh': 'exec ssh ...' Tất cả điều này là shell có liên quan và hầu như không phải là đặc trưng cho 'ssh'. –

2

Hãy thử điều này:

var="/home/dir/" 

    ssh -T $mchname VAR=$var 'bash -s'<<'ENDSSH'  
    $VAR"run_script" <input> output &  
ENDSSH 
Các vấn đề liên quan