Tôi đang tạo các kịch bản triển khai cho dự án của mình và tôi đang tạo một chức năng có thể chạy lệnh cả cục bộ và từ xa (trên máy chủ thông qua ssh) và trả về đầu ra văn bản.
Khi chạy một lệnh cục bộ, tôi có thể dễ dàng biết liệu lệnh đã kết thúc hay chưa bằng cách chờ đợi PID của nó. Khi tôi gửi lệnh qua kết nối SSH đang mở, tôi sẽ nhận lại đầu ra, nhưng tôi không biết lệnh đã thoát hay nếu lệnh vẫn đang chạy và sẽ tạo thêm đầu ra sau này.
Hiện tại tôi đã "giải quyết" điều này bằng cách mở một kết nối mới đến máy chủ cho mỗi lệnh, điều không cần phải nói là rất đáng kinh ngạc chậm .
Đây có vẻ như là một vấn đề phổ biến và có thể có một giải pháp đơn giản, thậm chí có thể là một thứ gì đó được tích hợp trong SSH, vì vậy tôi hỏi ở đây: Làm thế nào tôi có thể, qua một kết nối SSH mở, biết liệu các lệnh tôi đã gửi xong. Nếu tôi bằng cách nào đó có thể thu thập mã thoát quá thì đó sẽ là tuyệt vời.
Để đưa ra một ví dụ cụ thể hơn, điều này về cơ bản thể hiện vấn đề của tôi trong Ruby:
io = IO.popen(["ssh", "-q", "my-server"], "r+")
io.write("some command\n")
# Sleep for some arbitrary amount of time, because I don't know when the
# command has finished :(
sleep 1
output = io.readpartial(1_000_000)
io.write("some command\n")
# Sleep for some arbitrary amount of time, because I don't know when the
# command has finished :(
sleep 1
output = io.readpartial(1_000_000)
my_command -myoptions AndParameters
) với LetsStoreInterestingPID=$?
ngay sau lệnh và sau một số lệnh khác wait $LetsStoreInterestingPID
...
Mycommnad; InterestingPID=$? ; ... ;wait $InterestingPID
như lệnh đa dòng của lệnh ssh? Bạn có thể sử dụng BTWwait
?