Plinkから戻りコードを取得しますか?
-
28-09-2019 - |
質問
DOSバッチスクリプトでは、Plinkを使用してリモート(Windows)コンピューターで単一のコマンドを実行しています。以前は、このコマンドはローカルマシンでのみ実行され、成功を決定するために返品コードに依存していました。この情報をPlinkから簡単に戻す方法はありますか?
解決
それは不可能です plink
. 。現在のコンセンサスは、リモートスクリプトを持つことです echo
ログファイルへのその終了コード、次に使用します pscp
ログファイルをローカルマシンに転送します。
見る http://fixunix.com/ssh/74235-errorlevel-capturing-plink.html.
他のヒント
Plink 0.66で
C:\Code>echo Y | "C:\Program Files (x86)\PuTTY\plink.exe" bob@myserver exit 42
C:\Code>echo %ERRORLEVEL%
42
また、接続が行われない時期に関する@John Wiersbaの懸念については、これは修正されているように見えます
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
また、の配管に注意してください echo Y
...これにより、サーバーの指紋を自動的に受け入れることができます(控えめに言っても少し危険です...しかし、ログインサーバーはロードバランスが取れているため、常に異なる指紋を取得しています:()
ただし、@LeonBloyが指摘しているように、Plinkにはゼロの出口コードを返す接続条件がまだいくつかあります。出口コード範囲がわかっていて、ファイルを介してWindowsに戻る良い方法がない場合。 exitコードに+3(exitコードが決して== 253-255にならないことがわかっている場合)または少し単に適用することもできます(私は提案することができます exit $(($?|128))
- バッシュで)。
または、正確な出口コードを気にしない場合は、成功のために2を返し、失敗のためにゼロを返すことができます。したがって、2つの終了コードは障害を示します。バッシュではこれは次のとおりです。 echo $((($?==0) << 1))
. 。これは、最も堅牢な汎用ソリューションですが、デバッグ性のために出口コードがログに記録されていることを確認する必要があります。