Как скрыть stderr, не “отключая звук” ввода данных пользователем

Для помещения его просто у меня есть сценарий, который использует 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()

3
задан 14 July 2015 в 00:39

1 ответ

Можно перенаправить read stderr к stdout:

read -p "Input: " x 2>&1

script.sh:

#!/bin/bash
read -p "Input: " x 2>&1

screenshot

3
ответ дан 1 December 2019 в 16:27

Другие вопросы по тегам:

Похожие вопросы: