2010-11-03 35 views
10

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?obtener código de retorno de plink?

Respuesta

6

Eso no es posible con plink. El consenso actual es tener el script remoto echo como código de salida en un archivo de registro, luego use pscp para transferir el archivo de registro a la máquina local.

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

+5

Para el beneficio de cualquier persona que lea esto hoy, quizás esto fue cierto cuando fue escrito, pero ya no es cierto. La versión actual de plink devolverá el código de salida remoto cuando use el protocolo ssh. – richb

+0

... ejemplos de trabajo [** aquí **] (http://stackoverflow.com/a/2988139/319204) y [** aquí **] (http://superuser.com/a/130528). – TheCodeArtist

+3

@richb: No es exactamente cierto. Plink 0.63 tiene éxito (estado de salida 0) cuando no se puede establecer una conexión. :-( –

2

con plink 0,66

C:\Code>echo Y | "C:\Program Files (x86)\PuTTY\plink.exe" [email protected] exit 42 

C:\Code>echo %ERRORLEVEL% 
42 

también de preocupación de @John Wiersba acerca de cuándo una conexión no se puede hacer, esto parece ser fijo

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 

También tenga en cuenta la tubería de 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 equilibrio 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 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.

+0

_ .. . Esto parece estar fijo_ ... hasta un punto: ''> plink.exe -batch -ssh -i key.ppk [email protected] Usando el nombre de usuario "pi". El servidor rechazó nuestra clave > echo % ERRORLEVEL% '' – leonbloy

Cuestiones relacionadas