2015-12-16 4 views
0

У меня есть скрипт bash, но он дает мне раздражающий вывод, который я не хочу видеть. Конечно, я могу скрыть это таким образом:Скрыть вывод в Bash Script

./script.sh >/dev/null 2>&1 

, но я хочу, чтобы поместить скрипт в «rc.local» или «хрон работу», так что это будет очень плохо, если он получил выходной сигнал каждые 5 минут например, или при загрузке. Будет здорово, если есть способ сказать всему скрипту скрыть вывод.

+1

Я не уверен на 100%, что вы просите - если вы никогда не хотите видеть результат, просто переадресовываете на '/ dev/null', как вы делаете. Возможно, более конкретный пример того, что вы пытаетесь сделать? Вам может быть интересно [этот вопрос] (http://unix.stackexchange.com/q/41381/19157), который обсуждает подавление вывода только в том случае, если команда выполнена успешно. – dimo414

+1

Не можете ли вы просто поставить './script.sh>/dev/null 2> & 1' в rc.local или crontab? –

ответ

5

Если вы хотите перенаправить весь вывод /dev/nullв сценарий, который может быть сделано таким образом (в данном случае, только выполняя переназначение, если переменная окружения DEBUG не установлена):

#!/bin/bash 
[[ $DEBUG ]] || exec >/dev/null 2>&1 
# ...continue with execution here. 

Вы также можете проверить ли ваш вход с TTY для обнаружения интерактивного использования:

if [ -t 0 ]; then 
    # being run by a human, be extra verbose 
    PS4=':$LINENO+' 
    set -x 
else 
    # being run by a daemon, be outright silent 
    exec >/dev/null 2>&1 
fi 

См the bash-hackers page on the exec builtin.

Смежные вопросы