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

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


person Nate    schedule 03.11.2010    source источник


Ответы (2)


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

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

person Frédéric Hamidi    schedule 03.11.2010
comment
Для блага всех, кто читает это сегодня, возможно, это было правдой, когда это было написано, но сейчас это неправда. Текущая версия plink будет возвращать код удаленного выхода при использовании протокола ssh. - person richb; 29.03.2014
comment
@richb: Не совсем так. Plink 0.63 завершается успешно (состояние выхода 0), когда соединение не может быть установлено. :-( - person jrw32982; 13.05.2015
comment
Как сказано в stackoverflow.com/a/33666492 и из комментариев здесь, вы можете получить некоторый код выхода из plink. - 0: успешно - 1: не удалось - person myuce; 06.12.2016

с плинком 0.66

C:\Code>echo Y | "C:\Program Files (x86)\PuTTY\plink.exe" bob@myserver exit 42

C:\Code>echo %ERRORLEVEL%
42

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

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

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

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

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

person DevNull    schedule 08.12.2016
comment
... похоже, это исправлено... до определенного момента: >plink.exe -batch -ssh -i key.ppk [email protected] Using username "pi". Server refused our key >echo %ERRORLEVEL% 0 - person leonbloy; 12.01.2017