
Я запускаю несколько модульных тестов, которые включают конвейеризацию в мой исполняемый файл, например, вот так.
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
Если вы получаете другой результат, то, должно быть, вы делаете что-то не то, что указали в своем вопросе, но поскольку мы понятия не имеем, что именно, невозможно дать какие-либо полезные рекомендации.