10


2

plinkから戻りコードを取得しますか?

DOSバッチスクリプトでは、plinkを使用してリモート(またWindows)コンピューターで単一のコマンドを実行しています。 以前は、このコマンドはローカルマシンでのみ実行され、成功を判断するためにリターンコードに依存していました。 plinkを使用してこの情報を簡単に取得する方法はありますか?

2 回答


6


それは `plink`では不可能です。 現在のコンセンサスでは、リモートスクリプトに終了コードを「エコー」させてログファイルに記録し、「pscp」を使用してログファイルをローカルマシンに転送します。


2


plink 0.66を使用

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

C:\Code>echo %ERRORLEVEL%
42

また、@ John Wiersbaが接続を確立できない場合の懸念については、これは修正されているようです。

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

「エコーY」の配管にも注意してください…​ これにより、サーバーの指紋を自動的に受け入れることができます(控えめに言っても少し危険です) . ログインサーバーは負荷分散されているため、常に取得しています 異なる指紋:()

ただし、@ LeonBloyが指摘しているように、plinkには、ゼロの終了コードを返す接続条件がまだあります。 終了コードの範囲がわかっていて、ファイルを介してWindowsに通信する良い方法がない場合。 終了コードに+3のいずれかを使用できます(終了コードがわからない場合は == 253-255)またはビット単位のORを適用できます(お勧めします) exit $(($?| 128))-bashで)。

または、正確な終了コードを気にしない場合、成功の場合は2、失敗の場合は0を返すことができます。 したがって、2以外の終了コードは失敗を示します。 bashでは、これは次のようになります: echo $((($?== 0)<< 1))。 これは間違いなく最も堅牢な汎用ソリューションですが、デバッグ機能のために終了コードを記録する必要があります。