2010-12-13 20 views
7

Bạn có thể giải thích chính xác dòng cuối cùng của điều này là gì không và tại sao nó lại cần thiết?Bash Script: Điều này có nghĩa là gì? "đã hoàn thành</ dev/null & disown"

while true; do 
    /usr/bin/ssh -R 55555:localhost:22 -i ~/.ssh/tunnel-id [email protected] 
    sleep 1 
done < /dev/null & disown 

Đó là toàn bộ tập lệnh và mục đích là tạo đường hầm SSH cho máy chủ chuyển tiếp. Tôi là người mới đối với Bash, nhưng có vẻ như nó sẽ liên tục cố giữ kết nối còn sống, nhưng tôi không hiểu cú pháp của dòng cuối cùng.

kịch bản này là một phần của một quá trình sử dụng SSH đằng sau một bức tường lửa, hoặc trong trường hợp của tôi một NAT: http://martin.piware.de/ssh/index.html

Trả lời

7

Dòng cuối cùng chuyển hướng /dev/null vào vòng lặp như là đầu vào - mà ngay lập tức trả EOF - và chạy quá trình trong nền. Sau đó, nó chạy lệnh disown (1) ở mặt trước, làm gián đoạn quá trình, ngăn chặn các tín hiệu HUP ngăn chặn nó (giống như nohup). hiệu quả là làm cho vòng lặp thành một thứ giống như một quy trình daemon.

Vòng lặp tổng thể chạy lệnh ssh sau mỗi giây. Lệnh này đang mở một đường hầm ssh, kết nối nó cục bộ với cổng 5555 và từ xa đến cổng 22 (ssh). Nếu có cái gì đó để kết nối, nó có; nếu không thì EOF được chuyển hướng sẽ làm cho nó chấm dứt. Sau đó nó cố gắng aagain một giây sau đó.

(Hoặc vì vậy tôi tin rằng, tôi đã không thực sự cố gắng đó.)

Trong bash, không nhận là một built-in; sử dụng help disown để xem một số chi tiết.

+0

Làm thế nào đến kết quả đầu ra "ssh: kết nối với cổng máy chủ server.com 22: Thao tác không được phép", nhưng khi tôi nhận xét dòng "sleep 1" có vẻ như hoạt động bình thường. – drifter

+0

Đối với bất cứ ai đọc điều này, nó có vẻ là một vấn đề với Cygwin vì điều này không xảy ra trong bản phân phối Linux của tôi. – drifter

2

Chuyển hướng /dev/null vào vòng lặp while đóng một cách hiệu quả stdin tương đương với exec <&-.

+0

Khi tôi chạy nó trong Cygwin, nó kết quả đầu ra "Pseudo-thiết bị đầu cuối sẽ không được phân bổ vì stdin không phải là một thiết bị đầu cuối." Tôi đoán đó là điều bình thường. – drifter

+0

@drifter: Tôi tin như vậy. –

+0

Cảm ơn. Tôi nhận được một lỗi lạ hơn. Nếu bạn muốn tham khảo bình luận tôi đăng trên câu trả lời của Charlie Martin, tôi sẽ đánh giá cao nó. – drifter

Các vấn đề liên quan