![如何在Windows上取得管道和可執行檔的回傳值](https://rvso.com/image/1703331/%E5%A6%82%E4%BD%95%E5%9C%A8Windows%E4%B8%8A%E5%8F%96%E5%BE%97%E7%AE%A1%E9%81%93%E5%92%8C%E5%8F%AF%E5%9F%B7%E8%A1%8C%E6%AA%94%E7%9A%84%E5%9B%9E%E5%82%B3%E5%80%BC.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
如果您得到不同的結果,您必須做一些與問題中顯示的不同的事情,但由於我們不知道那是什麼,所以不可能提出任何有用的建議。