Примечание редактора: Этот вопрос подвергся нескольким ревизиям, которые изменили характер проблемы, что может привести к недействительности старых комментариев и ответов; его первоначальное название было «Невозможно перенаправить вывод Bash в/dev/null».Невозможно перенаправить файловый дескриптор, хранящийся в переменной
Я пытаюсь создать небольшой скрипт Bash, для которого я хотел бы реализовать тихий режим. В основном я бы просто хотел скрыть большую часть вывода по умолчанию, и в случае, если я запустил его с -v
, покажите весь вывод.
Так в начале моего сценария я поставил:
#!/bin/bash
declare output=''
if [ "$1" = -v ]; then
output="&1"
else
output="/dev/null"
fi
Тогда в моем сценарии у меня есть:
{
# whatever commands...
} > $output 2>&1
Бесшумный режим работает хорошо. Однако, если я попытаюсь использовать подробный режим, создается файл с именем &
или &1
(на основе моей переменной output
). Кроме того, файл пуст. Это не желаемый результат: я хочу, чтобы выход оставался на терминале!
Это из-за порядка, в котором я перенаправляю или это моя переменная, которая не так? EDIT: теперь скрипт работает полностью, заменив "&1"
на выходное значение "/dev/tty"
.
Попробуйте http://shellcheck.net/ перед публикацией здесь. Назначение для закрытия как простой опечатки. – tripleee
Спасибо за ссылку! Однако даже после исправления опечатки возникает проблема: включен ли режим подробностей или нет, выход всегда один и тот же. – Lupuss
@ Lupuss Redirect stderr, а также – 123