Короткий ответ: ты не можешь. Bash всегда печатает статус заданий переднего плана. Флаг мониторинга применяется только для фоновых заданий и только для интерактивных оболочек, а не сценариев.
см. Notify_of_job_status () в jobs.c.
Как вы говорите, вы можете перенаправить так, чтобы стандартная ошибка указывала на / dev / null, но тогда вы пропускаете любые другие сообщения об ошибках. Вы можете сделать это временным, выполнив перенаправление в подоболочке, которая запускает скрипт. Это оставляет исходную среду в одиночестве.
(script 2> /dev/null)
, что приведет к потере всех сообщений об ошибках, но только из этого скрипта, а не из чего-либо еще, запущенного в этой оболочке.
Вы можете сохранить и восстановить стандартную ошибку, перенаправив новый дескриптор файла, указав туда:
exec 3>&2 # 3 is now a copy of 2
exec 2> /dev/null # 2 now points to /dev/null
script # run script with redirected stderr
exec 2>&3 # restore stderr to saved
exec 3>&- # close saved version
Но я бы не рекомендовал это - единственный плюс в первом - это то, что он сохраняет вызов под-оболочки, хотя и более сложный и, возможно, даже изменяет поведение скрипта, если скрипт изменяет дескрипторы файлов .
EDIT:
Для более подходящего ответа проверьте ответ, заданный Марк Эдгар