2010-11-03 18 views
10

In uno script batch DOS, sto eseguendo un singolo comando su un computer remoto (anche Windows) usando il plink. Precedentemente, questo comando veniva eseguito solo sulla macchina locale e faceva affidamento sul codice di ritorno per determinare il successo. C'è un modo per ottenere facilmente queste informazioni attraverso plink?ottiene il codice di ritorno da plink?

risposta

6

Questo non è possibile con plink. Il consenso corrente è di avere lo script remoto echo il suo codice di uscita in un file di registro, quindi utilizzare pscp per trasferire il file di registro sul computer locale.

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

+5

Per il beneficio di chiunque stia leggendo questo oggi, forse questo era vero quando è stato scritto ma non è più vero. L'attuale versione di plink restituirà il codice di uscita remota quando si utilizza il protocollo ssh. – richb

+0

... esempi di lavoro [** qui **] (http://stackoverflow.com/a/2988139/319204) e [** qui **] (http://superuser.com/a/130528). – TheCodeArtist

+3

@richb: non esattamente vero. Plink 0.63 ha successo (stato di uscita 0) quando non è possibile stabilire una connessione. :-( –

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 

Anche per la preoccupazione di @ John Wiersba a quando la connessione non può essere fatto, questo sembra essere fissato

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 

notare la tubazione di echo Y anche ... questo consente di accettare automaticamente l'impronta digitale del server (un po 'pericoloso per non dire altro ... ma il nostro server di login è bilanciato, quindi ottieni sempre impronte digitali diverse :()

Tuttavia, come note @LeonBloy, plink ha ancora alcune condizioni di connessione che restituiscono un codice di uscita zero. Se conosci il tuo intervallo di codice di uscita e non hai un buon modo di comunicare a Windows tramite un file. Puoi +3 al codice di uscita (se sai che il codice di uscita non sarà mai == 253-255) o potresti applicare un OR bit a bit (ti suggerirei exit $(($?|128)) - in bash).

Oppure, se non ti interessa il codice esatto di uscita, puoi restituire 2 per il successo e zero per il fallimento. Pertanto un codice di non uscita due indica un errore. In bash questo sarebbe: echo $((($?==0) << 1)). Questa sarebbe di gran lunga la soluzione per scopi generali più robusta, ma dovresti assicurarti che il tuo codice di uscita sia registrato per il debug-abilità.

+0

_ .. questo sembra essere fisso_ ... fino a un punto: ''> plink.exe -batch -ssh -i key.ppk [email protected] Utilizzo del nome utente "pi". Il server ha rifiutato la nostra chiave > echo % ERRORLEVEL% '' – leonbloy

Problemi correlati