В частности, я пишу скрипт, чтобы упростить компиляцию и запуск моего кода на C++. Легко сказать, удалось ли компиляции сбой, но я также хочу добавить состояние, в котором оно «скомпилировано с предупреждениями».Bash capture stderr в переменную без перенаправления
$out # to avoid an "ambiguous redirect"
g++ -Wall -Wextra $1 2> out
if [ $? == 0 ]
then
# this is supposed to test the length of the output string
# unless there are errors, $out should be length 0
if [ ${#out} == 0 ]
then
# print "Successful"
else
# print "Completed with Warnings"
fi
else
# print "Failed"
fi
Как это, проверка провал случае работает нормально, но $out
не всегда пустая строка, хотя STDERR больше не отображать на экране, $out
фактически никогда не установлено. Если возможно, мне также хотелось бы, чтобы stderr продолжал идти на экран.
Надеюсь, что я сказал, имеет смысл. Приветствия.
, который улавливает в' $ out', которая была моей главной проблемой , хотя он, похоже, не позволяет '$? 'получить статус выхода' g ++ ', я предполагаю, что это потому, что после компиляции он запускает' tee'. Как еще я могу получить этот статус? – Dustin
Массив 'PIPESTATUS' будет хранить статус выхода каждой команды в последнем конвейере переднего плана, поэтому после этого назначения' $ {PIPESTATUS [0]} 'должен содержать статус выхода' g ++ '. – chepner
'PIPESTATUS' всегда, кажется, содержит одиночный 0, независимо от статуса выхода' g ++ '. – Dustin