2010-11-03 17 views
10

Trong tập lệnh batch DOS, tôi đang chạy một lệnh trên máy tính từ xa (cũng có cửa sổ) bằng cách sử dụng lệnh plink. Trước đây, lệnh này chỉ chạy trên máy cục bộ và dựa vào mã trả về để xác định thành công. Có cách nào để dễ dàng lấy lại thông tin này qua plink không?lấy mã trả về từ lệnh plink?

Trả lời

6

Điều đó là không thể với plink. Sự đồng thuận hiện tại là để có tập lệnh từ xa echo mã thoát của nó vào tệp nhật ký, sau đó sử dụng pscp để chuyển tệp nhật ký sang máy cục bộ.

Xem http://fixunix.com/ssh/74235-errorlevel-capturing-plink.html.

+5

Vì lợi ích của bất kỳ ai đọc sách này ngày nay, có lẽ điều này là đúng khi nó được viết nhưng nó không còn đúng nữa. Phiên bản hiện tại của plink sẽ trả lại mã thoát từ xa khi sử dụng giao thức ssh. – richb

+0

... ví dụ hoạt động [** tại đây **] (http://stackoverflow.com/a/2988139/319204) và [** tại đây **] (http://superuser.com/a/130528). – TheCodeArtist

+3

@richb: Không chính xác. Plink 0.63 thành công (trạng thái thoát 0) khi không thể thực hiện kết nối. :-( –

2

với Plink 0,66

C:\Code>echo Y | "C:\Program Files (x86)\PuTTY\plink.exe" [email protected] exit 42 

C:\Code>echo %ERRORLEVEL% 
42 

Cũng quan tâm @ John Wiersba về khi một kết nối không thể được thực hiện, điều này dường như được cố định

C:\CodeMisc>echo Y | "C:\Program Files (x86)\PuTTY\plink.exe" [email protected] exit 42 
Unable to open connection: 
Host does not exist 
C:\Code>echo %ERRORLEVEL% 
1 

Cũng lưu ý các đường ống của echo Y ... Đây cho phép bạn chấp nhận dấu vân tay máy chủ tự động (một chút nguy hiểm để nói ít nhất ... nhưng máy chủ đăng nhập của chúng tôi được tải cân bằng, vì vậy bạn luôn nhận được dấu vân tay khác nhau :()

Tuy nhiên như ghi chú @LeonBloy, plink vẫn có một số điều kiện kết nối trả lại mã thoát zero. Nếu bạn biết phạm vi mã thoát của mình và bạn không có cách giao tiếp tốt với cửa sổ qua tệp. Bạn có thể +3 vào mã thoát (nếu bạn biết mã thoát sẽ không bao giờ == 253-255) hoặc bạn có thể áp dụng một bit OR (tôi muốn đề xuất exit $(($?|128)) - trong bash).

Hoặc nếu bạn không quan tâm đến mã thoát chính xác, bạn có thể trả về 2 để thành công và không cho thất bại. Do đó, mã thoát không phải là hai sẽ cho biết lỗi. Trong bash này sẽ là: echo $((($?==0) << 1)). Đây sẽ là giải pháp mục đích chung mạnh mẽ nhất, nhưng bạn nên chắc chắn rằng mã thoát của bạn được ghi lại cho khả năng gỡ rối.

+0

_ .. điều này dường như được cố định_ ... đến một điểm: ''> plink.exe -batch -ssh -i key.ppk [email protected] Sử dụng tên người dùng "pi". Máy chủ từ chối khóa của chúng tôi > echo % ERRORLEVEL% '' – leonbloy