#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