В пакете DOS script, я запускаю одну команду на удаленном (также Windows) компьютере с использованием plink. Раньше эта команда выполнялась только на локальной машине и полагалась на код возврата для определения успеха. Есть ли способ легко вернуть эту информацию через 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))
. Это будет, безусловно, наиболее надежное решение общего назначения, но вы должны убедиться, что ваш код выхода зарегистрирован для возможности отладки.