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