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

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

2 ответов


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

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


С плинк 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)). Это было бы самым надежным решением общего назначения, но вы должны убедиться, что ваш код выхода зарегистрирован для отладки.