![Как получить возвращаемое значение канала и исполняемого файла в Windows](https://rvso.com/image/1703331/%D0%9A%D0%B0%D0%BA%20%D0%BF%D0%BE%D0%BB%D1%83%D1%87%D0%B8%D1%82%D1%8C%20%D0%B2%D0%BE%D0%B7%D0%B2%D1%80%D0%B0%D1%89%D0%B0%D0%B5%D0%BC%D0%BE%D0%B5%20%D0%B7%D0%BD%D0%B0%D1%87%D0%B5%D0%BD%D0%B8%D0%B5%20%D0%BA%D0%B0%D0%BD%D0%B0%D0%BB%D0%B0%20%D0%B8%20%D0%B8%D1%81%D0%BF%D0%BE%D0%BB%D0%BD%D1%8F%D0%B5%D0%BC%D0%BE%D0%B3%D0%BE%20%D1%84%D0%B0%D0%B9%D0%BB%D0%B0%20%D0%B2%20Windows.png)
Я запускаю несколько модульных тестов, которые включают конвейеризацию в мой исполняемый файл, например, вот так.
cat text.txt | my_exe --options
Запуская эти команды, как мне получить возвращаемое значение my_exe
? Даже если my_exe
возвращается сбой, возвращаемое значение отбрасывается. Я предполагаю, что возвращаемое значение cat
имеет приоритет вместо этого.
Если задать другой вопрос, как мне выполнить указанную выше команду pipe, чтобы получить то же возвращаемое значение, что и:
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
Если вы получаете другой результат, то, должно быть, вы делаете что-то не то, что указали в своем вопросе, но поскольку мы понятия не имеем, что именно, невозможно дать какие-либо полезные рекомендации.