Использование ввода файла как stdin для сценария оболочки не работает

У меня есть следующий код сценария:

test.sh

echo "BEGIN" while read CMD <&1; do [ -z "$CMD" ] && continue case "$CMD" in start) echo "get_start" ;; stop) echo "get_stop" ;; *) echo "get_uknown_command" ;; esac echo "END"; done 

Когда я запускаю его с:

 $./test.sh <input.txt 

Я закрыл свой скрипт

input.txt

 start stop sthh 

Почему мой скрипт заблокирован? Как я могу это исправить?

BTW: Если я буду вводить данные вручную, сценарий не будет заблокирован.

One Solution collect form web for “Использование ввода файла как stdin для сценария оболочки не работает”

Вторая строка неверна и слишком сложна. Дескрипторы файла для stdin , stdout и stderr равны 0 , 1 и 2 соответственно, поэтому для чтения из stdin вы хотите иметь

 while read CMD <&0; do 

Однако, поскольку stdin является stdin по умолчанию для read ,

 while read CMD; do 

это самый простой способ. Таким образом, вы можете вручную вводить команды или использовать перенаправление в командной строке для чтения из файла.

  • Сценарий Ed работает только в том случае, если набирается медленно
  • Bash: замена процесса и stdin
  • Какова связь между выходом программы, стандартным выходом и файловыми дескрипторами?
  • автоматически записывать ответы на программу, которая уже читает со стандарта в
  • Почему cc (компилятор C) и подобные утилиты по умолчанию не используют стандартные потоки?
  • Синтаксис Ошибка при попытке запустить скрипт
  • Определите, когда скрипт python ожидает ввода вручную
  • Как передавать данные из одной команды в другую команду, которая разрешает только файл в качестве аргумента?
  • Как работает `stdin` linux?
  • Как программы с программным обеспечением с оболочкой уравновешивают скорость вывода / ввода?
  • gzip тот же вход различный выход
  • Interesting Posts
    Linux и Unix - лучшая ОС в мире.