Как отключить вывод всех команд в скрипте Bash?

#bash

#bash

Вопрос:

Мой скрипт Bash вызывает много команд, большинство из них что-то выводят. Я хочу заставить их всех замолчать. Прямо сейчас я добавляю amp;>/dev/null в конце большинства вызовов команд, например:

 some_command amp;>/dev/null
another_command amp;>/dev/null
command3 amp;>/dev/null
  

У некоторых команд есть флаги, подобные --quiet или похожие, тем не менее, мне нужно было бы решить это для всех из них, и я бы предпочел отключить все из них по умолчанию и разрешить вывод только явно, например, через echo .

Комментарии:

1. Вы могли бы просто перенаправить вывод самого внешнего скрипта.

2. Может быть дубликат unix.stackexchange.com/questions/61931 /… .

Ответ №1:

Вы можете использовать exec команду, чтобы перенаправить все для остальной части скрипта.

Вы можете использовать 3>amp;1 для сохранения старого потока стандартного вывода на FD 3, чтобы вы могли перенаправить вывод на него, если хотите увидеть результат.

 exec 3>amp;1 amp;>/dev/null
some_command
another_command
command_you_want_to_see >amp;3
command3
  

Ответ №2:

Вы можете создать функцию:

 run_cmd_silent () {
    # echo "Running: ${1}"
    ${1} > /dev/null 2>amp;1
}
  

Вы можете удалить строку с комментариями, чтобы напечатать фактическую команду, которую вы запускаете.

Теперь вы можете запускать свои команды следующим образом, например:

 run_cmd_silent "git clone git@github.com:prestodb/presto.git"
  

Комментарии:

1. Это создает всевозможные проблемы с пробелами и обработкой параметров.

2. "$@" предназначен для этого: run_cmd_silent() { "$@" > /dev/null 2>amp;1; }; run_cmd_silent git clone git@github.com:prestodb/presto.git