Ваше перенаправление не работает, потому что оно применяется к родительской оболочке, а не к подчиненной оболочке, которая выполняет конвейер.
Если вы хотите отправить stderr набора команд в / dev / null, вы можете сделать это следующим образом - я использую $()
вместо backticks :
Z=$( { diff -Z $ref_out $exec_out | grep "[<>]" | wc -l; } 2>/dev/null )
Здесь 2>/dev/null
применяется ко всем командам внутри { }
.
В вашем коде много проблем. Вы могли бы переписать это лучше:
if diff -Z "$ref_out" "$exec_out" 2>/dev/null | grep -q "[<>]"; then
echo "*** testcase: [ stdout - FAILED ]"
else
echo "*** testcase: [ stdout - PASSED ]"
fi
grep -q
- лучший способ сделать эту проверку, и вам не понадобится wc -l
, если вы не хотите знать точное количество совпадений
- вам нужно процитировать ваши переменные
if
оператор может включать команды; вам не нужно захватывать вывод, чтобы использовать его в операторе if
Вы можете использовать shellcheck , чтобы проверить ваш сценарий оболочки и посмотреть, делаете ли вы обычные ошибки, которые могут нарушить ваш код.