Intereting Posts

Использование ввода файла как 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: Если я буду вводить данные вручную, сценарий не будет заблокирован.

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

 while read CMD <&0; do 

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

 while read CMD; do 

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