Observe que goto
era um utilitário separado, portanto, não faz parte do shell Thompson por si.
Quando você invoca o shell Thomson como:
sh the-script
sh
abre the-script
em stdin
(fd 0) como se você tivesse escrito
sh < the-script
em vez disso.
O comando goto
irá seek
stdin voltar para o início (o que obviamente se stdin fosse um terminal e não um arquivo normal não funcionaria) então procure o rótulo lá e deixe o cursor no arquivo logo depois disso. Então a casca continuaria daí.
Se você quiser que um comando em seu script leia o que era stdin originalmente, use o operador de redirecionamento especial <-
:
cmd <-
Observe que com o mesmo comando goto
, seu script também funcionará com bash
se você invocar seu script de shell da Thomson como:
bash < the-script
ksh93
pode emular esse goto
com operadores de redirecionamento procurando especiais. Por exemplo, este script de shell da Thomson:
echo Start
: start
ls -ld /proc/self/fd/0
sleep 1
goto start
echo End never reached
Pode ser escrito em ksh93
como:
echo Start
: start
ls -ld /proc/self/fd/0
sleep 1
exec <#((0)) <#": start"
echo End never reached
Ambos seriam executados (desde que você tenha o comando V6 goto
) com ksh93
quando chamado como:
ksh93 < the-script