Aqui estão os principais recursos do Unix e do shell V6 que fazem com que goto
funcione:
- Quando um processo é forjado, todos os descritores de arquivos abertos são compartilhados entre pai e filho.
- Isso significa que qualquer reposicionamento do deslocamento de leitura / gravação do arquivo por qualquer processo será refletido em todos os processos que tiverem o mesmo descritor de arquivo compartilhado.
- O shell V6 lê um script de shell, um caractere por vez, a partir de sua entrada padrão, sem buffer.
- Quando o shell V6 estiver executando um script, qualquer processo criado pelo shell V6 que leia stdin ou usará a chamada de sistema
seek
para mover o deslocamento de leitura / gravação de stdin, será a leitura e a movimentação da leitura / gravação escrever offset, o script de shell. - O comando
:
do shell é um comando que (quase) nada, portanto, um de seus usos é comogoto
target. Além de verificar argumentos para erros de sintaxe (e, em shells modernas, expansão de variáveis shell, que podem causar efeitos colaterais), nada é feito com seus argumentos.
: > file
é uma maneira de truncar um arquivo.
: end echo "hello"
não produzirá nada. Esses outros exemplos,:end echo "hello"
eend: echo "hello"
, tentarão executar os comandos:end
eend:
, que provavelmente não existem. - O comando
goto
define o deslocamento de leitura / gravação de stdin como 0 - o início do script de shell - e lê stdin procurando uma linha que começa com:
, um ou mais espaços em branco, o argumento passado paragoto
e uma linha em branco ou nova linha. Quando encontra uma correspondência, ela sai, deixando o deslocamento de leitura / gravação para logo após a linha, e é aí que o shell continuará a executar o script.
Você pode ver a fonte de goto
aqui: link
Você perguntou
I'm not allowed to type goto in the shell?
Você pode. O comando goto
irá verificar se stdin é de um terminal; se assim for, ele irá escrever uma mensagem de erro e sair.