tutorial script batch scripting batch-file plink errorlevel

scripting - script - obtener el código de retorno de plink?



plink ssh (2)

Eso no es posible con plink . El consenso actual es hacer que la secuencia de comandos remota emita un echo su código de salida en un archivo de registro, luego utilice pscp para transferir el archivo de registro a la máquina local.

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

En una secuencia de comandos por lotes de DOS, estoy ejecutando un solo comando en una computadora remota (también Windows) usando plink. Anteriormente, este comando solo se ejecutaba en la máquina local y confiaba en el código de retorno para determinar el éxito. ¿Hay alguna forma de recuperar fácilmente esta información a través del plink?


con plink 0.66

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

También para la inquietud de @John Wiersba sobre cuándo no se puede establecer una conexión, esto parece ser un problema

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

También tenga en cuenta la canalización del echo Y ... esto le permite aceptar la huella digital del servidor automáticamente (un poco peligrosa, por decir lo menos ... pero nuestro servidor de inicio de sesión tiene balance de carga, por lo que siempre obtendrá diferentes huellas dactilares :()

Sin embargo, como notas de @LeonBloy, plink todavía tiene algunas condiciones de conexión que devuelven un código de salida cero. Si conoce su rango de código de salida y no tiene una buena forma de comunicarse a través de un archivo. Podrías +3 al código de salida (si sabes que el código de salida nunca == 253-255) o podrías aplicar un OR a nivel de bits (Sugeriría la exit $(($?|128)) - en bash) .

O bien, si no le importa el código de salida exacto, puede devolver 2 para el éxito y cero para el fracaso. Por lo tanto, un código de salida que no sea dos indicaría una falla. En bash esto sería: echo $((($?==0) << 1)) . Esta sería, de lejos, la solución de propósito general más robusta, pero debe asegurarse de que su código de salida esté registrado para la capacidad de depuración.