Ошибка перенаправления в функции

Я пытаюсь понять, почему приведенный ниже код не работает, и дает мне ошибку. Bad file descriptor . Это своего рода продолжение этого вопроса, применимое к сценарию, над которым я сейчас работаю.

На раннем этапе в вызывающем абоненте запускается exec 3>&1 , и ничто позже явно не меняет его до того, как ниже (обобщенная) функция называется так:

 exec 3>&1 ... string=$(GetString) 

GetString выглядит так:

 GetString() { 4>&1 1>&3 #save pipe end and change output back to caller's controlvar=0 while ((controlvar != 1)) do printf "some stuff for the interactive user\n" read -p "my prompt" variable if ValidationFunction $variable; controlvar=1;fi #tests for valid input done exec 1>&4- #change output back to pipe end echo $variable } 

Я получаю ошибку Bad file descriptor во второй строке.

Что тут происходит? Обратите внимание, что я также не делаю ничего явно с fd / 4 в другом месте скрипта.

One Solution collect form web for “Ошибка перенаправления в функции”

С вашим вопросом есть несколько проблем.

Линия

 4>&1 1>&3 

Отсутствует exec:

 exec 4>&1 1>&3 

И линия:

 exec 1>4&- 

Должен прочесть

 exec 1>&4- 

Упрощенный скрипт должен выглядеть так:

 GetString() { exec 4>&1 1>&3 #save pipe end and change output back to caller's printf "some stuff for the interactive user\n" sleep 3 exec >&4- #change output back to pipe end echo "test value" } exec 3>&1 string=$(GetString) echo "final value <$string>" 

Этот сценарий имеет смысл.

Пожалуйста, отредактируйте вопрос, чтобы реально воспроизвести вашу проблему.

  • Переключиться на локальную сессию с удаленного SSH
  • mv на шаблоне glob не работает без sudo
  • Как я могу создать файл на основе команды оболочки в .tmux.conf?
  • Что такое wget-идиома для curl -o?
  • Синтаксические ошибки в сценарии bash, выполненные из tcsh
  • Режим vi не отображается корректно на новом терминале
  • Захват вывода функции оболочки без подоболочки
  • Использование среды bash из внешнего раздела ОС
  • Почему эти две команды «cat» приводятся по-разному?
  • Какая польза от использования точки до / дома?
  • как использовать другую оболочку при изменении на root
  • Linux и Unix - лучшая ОС в мире.