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