Получить код возврата из plink?

В пакете DOS script, я запускаю одну команду на удаленном (также Windows) компьютере с использованием plink. Раньше эта команда выполнялась только на локальной машине и полагалась на код возврата для определения успеха. Есть ли способ легко вернуть эту информацию через plink?

Ответ 1

Это невозможно при plink. Нынешний консенсус заключается в том, чтобы удаленный script echo его код выхода в файл журнала, затем используйте pscp для переноса файла журнала на локальный компьютер.

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

Ответ 2

с plink 0.66

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

C:\Code>echo %ERRORLEVEL%
42

Также для @John Wiersba беспокоиться о том, когда соединение невозможно сделать, это, по-видимому, исправлено.

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

Также обратите внимание на трубопровод echo Y... это позволяет автоматически принимать отпечаток сервера (немного опасно, если не сказать больше... но наш логин-сервер сбалансирован по нагрузке, поэтому вы всегда получаете разные отпечатки пальцев:()

Однако, как отмечает @LeonBloy, plink все еще имеет некоторые условия соединения, которые возвращают нулевой код выхода. Если вы знаете свой код кода выхода, и у вас нет хорошего способа связи с окнами через файл. Вы можете либо +3 на код выхода (если вы знаете, что код выхода никогда не будет == 253-255), либо вы можете применить побитовое ИЛИ (я бы предложил exit $(($?|128)) - в bash).

Или, если вам не нужен точный код выхода, вы можете вернуть 2 для успеха и нуль для отказа. Таким образом, не-два кода выхода означают отказ. В bash это будет: echo $((($?==0) << 1)). Это будет, безусловно, наиболее надежное решение общего назначения, но вы должны убедиться, что ваш код выхода зарегистрирован для возможности отладки.