У меня есть сценарий bash, который я хочу быть спокойным, когда вы бежите без привязки tty (например, cron). Я теперь искал способ условно перенаправить вывод в/dev/null в одной строке. Это пример того, что я имел в виду, но у меня будет гораздо больше команд, которые делают вывод в сценарииусловное перенаправление в bash
#!/bin/bash
# conditional-redirect.sh
if tty -s; then
REDIRECT=
else
REDIRECT=">& /dev/null"
fi
echo "is this visible?" $REDIRECT
К сожалению, это не работает:
$ ./conditional-redirect.sh
is this visible?
$ echo "" | ./conditional-redirect.sh
is this visible? >& /dev/null
, что я не» т нужно сделать, это дублировать все команды в с-перенаправлением или-не-перенаправлением вариант:
if tty -s; then
echo "is this visible?"
else
echo "is this visible?" >& /dev/null
fi
EDIT:
Было бы здорово, если бы решение предоставило мне способ вывода чего-либо в «тихом» режиме, например. когда что-то действительно не так, я мог бы получить уведомление от cron.
Да, это работает ! (Или даже более простой 'exec &>/dev/null') –
.., но имеет недостаток, что все выходные данные теряются в« тихом »режиме; могут быть ситуации, когда я действительно хочу что-то выводить, даже в режиме ожидания; см. обновленный вопрос. –
Хорошая точка, @ даниэль, я немного устал от зубов, и старые привычки сильно падают, но я обновил ответ, используя ваш предпочтительный способ. – paxdiablo