Usando uma entrada de arquivo como stdin para um script de shell não funciona

0

Eu tenho o seguinte código de script:

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

Quando eu executo com:

$./test.sh <input.txt

Eu pego meu script bloqueado

input.txt

start
stop
sthh

Por que meu script está bloqueado? Como posso consertar isso?

BTW: Se eu inserir os dados manualmente, o script não será bloqueado.

    
por MOHAMED 12.07.2013 / 12:53

1 resposta

4

Sua segunda linha está incorreta e excessivamente complexa. Os descritores de arquivos para stdin , stdout e stderr são 0 , 1 e 2 , respectivamente, portanto, leia a partir de stdin que você deseja ter

while read CMD <&0; do 

No entanto, como stdin é a entrada padrão para read ,

while read CMD; do

é realmente o caminho mais simples a seguir. Dessa forma, você pode inserir manualmente os comandos ou usar o redirecionamento na linha de comando para ler um arquivo.

    
por 12.07.2013 / 16:45