Перенаправьте stdout и stderr в /dev/null
:
> /dev/null 2>&1
ИЛИ в bash:
&> /dev/null
Вы можете сделать это для всех программ, созданных вашим скриптом, используя exec
с перенаправлением в начале вашего скрипта.
exec > /dev/null 2>&1
Если программы, которые вы вызываете в своем скрипте, не обращаются к терминалу напрямую (редко), это должно охватывать вас.
Одно замечание о перенаправлениях: порядок имеет значение. Это должно быть > /dev/null 2>&1
, НЕ 2>&1 >/dev/null
. Раньше я думал, что последний будет работать, потому что >
выглядит как стрелка, которая заставляет меня думать об указателях (как и слово "перенаправление"), и если я указываю stderr на stdout, а затем указываю stdout на /dev /null, тогда оба должны указывать на /dev /null. Это не тот случай, хотя. Файловые дескрипторы не являются указателями, и более полезно думать о них >
как о присваивании дескриптору файла, а не о указании. (Вроде того, потому что технически fd - это просто число, и вам нужны системные функции, такие как dup2
чтобы открыть другой файл в том же файловом дескрипторе; но я думаю, что назначение - это хорошая высокоуровневая абстракция).