Por que a seguinte sequência de shell termina tão rapidamente?

2

Sejam os arquivos com e fic com os direitos de acesso definidos na seguinte sequência de shell:

$ cat com
if tty>/dev/null
    then read x
    else read x<fic
fi
echo $x
$ cat fic
abcd
$ ls -l com fic
-r-xr-xr-x  1 jmr    ens    70 Jan 22 09:41 com
-r--r--r--  1 jmr    ens    5 Jan 22 09:41 fic
$

Por que ele para em echo $x quando com é lançado (em primeiro plano)? Não deveria ler fic então?

    
por ThePassenger 04.01.2016 / 18:45

2 respostas

5

if tty>/dev/null ; then
    read x
else
    read x<fic
fi

significa que fic será lido somente quando tty retornar um erro. O que acontecerá quando descobrir que seu stdin não é um terminal. Normalmente, isso acontece quando o script está em um canal ou quando você o executa via nohup , ou como uma tarefa cron ou remotamente via ssh -T ...

Usar [ -t 0 ] como uma condição é praticamente o mesmo (e mais rápido, já que [ aka test geralmente é incorporado nestes dias).

    
por 04.01.2016 / 19:22
1

O script com shell, quando executado em primeiro plano, pára na linha:     leia $ x porque está aguardando uma entrada em read no tty real.

Se você digitar uma linha, o read terminará e definirá essa linha com a variável x .

    
por 04.01.2016 / 20:05

Tags