Единственный способ представить код less - это если бы в оболочке была какая-то специальная составная команда all
, которая могла бы выглядеть примерно как
# hypothetical all command
all do
pytest -s
go test -v ./...
done
, чей статус выхода является логическим or
статусов выхода содержащейся команды. (Аналогичная команда any
будет иметь логический and
статусов выхода своих команд в качестве своего собственного статуса выхода.)
Не имея такой команды, я бы использовал ваш нынешний подход. Вы можете адаптировать предложение @ melpomene к функции chk
(которую я бы назвал после команды вместо того, чтобы вызывать вашу команду, чтобы она работала с произвольными командами оболочки):
chk () { flag=$(( flag | $? )); }
flag=0
pytest -s; chk
go test -v ./...; chk
exit "$flag"
Если вы не используете его ни для чего другого, вы можете использовать ловушку DEBUG
для обновления flag
перед каждой командой.
trap 'flag=$((flag | $?))' DEBUG
pytest -s
go test -v ./...
exit "$flag"
(Помните, что отладочная ловушка выполняется за до , когда оболочка выполняет другую команду, а не сразу после выполнения команды. Возможно, это имеет значение только в том случае, если вы ожидаете ловушка, срабатывающая между завершением последней команды и выходом из оболочки, но об этом все же стоит знать.)