Как скрыть stderr без & ldquo; muting & rdquo; ввод пользователя

Проще говоря, у меня есть скрипт, который использует read -e для захвата пользовательского ввода, но из-за среды появляется много сообщений об «сломанных трубах» и загрязняет дисплей. Я хотел скрыть stderr, поэтому я попробовал это:

main 2>/dev/null 

Что работает, как таковое, я могу дать вход, а ошибки разбитых труб так же хороши, как и ушли. Однако, по-видимому, этот метод заключается в том, как работает ввод пароля, потому что он отключает мой ввод. Я не могу понять, что я набираю.

Можно ли перенаправить потоки таким образом, чтобы я мог отключить stderr без отключения ввода? Я предполагаю, что read использует stderr для доставки подсказки, что может сделать это невозможным, но это не помешает спросить.

Для аргумента сценарий предназначен для запуска в (! d5)

Что касается 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, что ошибки уходят, а мой вход отключен.

Edit

Это было решено. Исправление состоит в том, чтобы перенаправить readder stderr на его stdout с помощью 2>&1.

См., поэтому мне нравится делать одну функцию «вход-приемник» всякий раз, когда речь идет о пользовательском вводе. Для меня реализация вышеупомянутого патча была такой же простой, как редактирование одной строки в get_input()

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

0 ответов

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

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