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
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.
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à.
_ .. 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
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
... esempi di lavoro [** qui **] (http://stackoverflow.com/a/2988139/319204) e [** qui **] (http://superuser.com/a/130528). – TheCodeArtist
@richb: non esattamente vero. Plink 0.63 ha successo (stato di uscita 0) quando non è possibile stabilire una connessione. :-( –