![Windows でパイプと実行ファイルの戻り値を取得する方法](https://rvso.com/image/1703331/Windows%20%E3%81%A7%E3%83%91%E3%82%A4%E3%83%97%E3%81%A8%E5%AE%9F%E8%A1%8C%E3%83%95%E3%82%A1%E3%82%A4%E3%83%AB%E3%81%AE%E6%88%BB%E3%82%8A%E5%80%A4%E3%82%92%E5%8F%96%E5%BE%97%E3%81%99%E3%82%8B%E6%96%B9%E6%B3%95.png)
次のように、実行可能ファイルへのパイプ処理を伴ういくつかの単体テストを実行しています。
cat text.txt | my_exe --options
これらのコマンドを実行すると、 の戻り値を取得するにはどうすればよいですかmy_exe
? が失敗を返した場合でもmy_exe
、戻り値は破棄されます。代わりに の戻り値が優先されると思いますcat
。
別の言い方をすると、上記のパイプ コマンドを実行して、次の値と同じ戻り値を返すにはどうすればよいですか。
cat text.txt && my_exe --options
ありがとう!
編集: 伝統的なものを使用しますcmd
。
答え1
cmd
パイプラインの終了ステータスを右端のコンポーネントに設定し、他のコンポーネント (または任意のコンポーネント) は「優先」されず、考慮もされません。次の点に注意してください。
c:\temp>echo exit 42 | cmd >NUL
c:\temp>echo %errorlevel%
42
c:\temp>cmd/c echo exit 42 | cmd >NUL
c:\temp>echo %errorlevel%
42
c:\temp>cmd/c "echo exit 42 && exit 17" | cmd >NUL
c:\temp>echo %errorlevel%
42
c:\temp>cmd/c exit 17 | cmd/c exit 0
c:\temp>echo %errorlevel%
0
c:\temp>cmd/c exit 11 | cmd/c exit 22 | cmd/c exit 33
c:\temp>echo %errorlevel%
33
c:\temp>cmd/c exit 11 | cmd/c exit 22 | cmd/c echo GOOD
GOOD
c:\temp>echo %errorlevel%
0
異なる結果が得られる場合は、Q で示した内容とは異なる操作を行っているはずですが、それが何なのかがわからないため、役立つ提案を行うことはできません。