Для помещения его просто у меня есть сценарий, который использует read -e
чтобы захватить ввод данных пользователем, но из-за среды, много 'поврежденного канала' передает всплывающее окно и загрязнить дисплей. Я хотел скрыть stderr, таким образом, я попробовал это:
main 2>/dev/null
Который работает, по сути, я могу дать вход, и поврежденные ошибки канала так же хороши, как уведено. Однако, по-видимому, этот метод - то, как ввод пароля работает, потому что он отключает звук моего входа. Я не вижу то, что я ввожу.
Действительно ли возможно перенаправить потоки таким способом, которым я могу отключить звук stderr, не отключая звук входа? Я предполагаю read
использует stderr для обеспечения подсказки, которая могла бы сделать это невозможным, но не повреждает спрашивать.
Ради аргумента сценарий разработан для выполнения в упомянутой среде, и я не могу просто измениться на другой.
Что касается main
, это - функция, которая обрабатывает ввод-вывод с пользователем и вызывает другие функции. Вот упрощенная версия:
main(){
while true; do
get_input $(get_completions)
[ $choice == "d" ] && fn_delete; continue
[ $choice == "vwr" ] && fn_change_vwr_command; continue
[ ... ]
done
}
Это хорошо работает отдельно. Это - когда я работаю main 2>/dev/null
то, что ошибки уходят, и мой вход отключен звук.
Это было решено. Фиксация должна перенаправить stderr чтения к своему stdout с 2>&1
.
Посмотрите, это - то, почему мне нравится делать единственную функцию "входного метода считывания", имея дело с вводом данных пользователем. Для меня, реализовывая вышеупомянутый патч было так же просто как редактирование одной строки в get_input()
Можно перенаправить read
stderr
к stdout
:
read -p "Input: " x 2>&1
script.sh
:
#!/bin/bash
read -p "Input: " x 2>&1