perguntas manuais

3

Hey :) Eu estou tentando entender o comando goto. Eu tenho algumas perguntas sobre o manual do goto. Aqui você pode encontrar o manual original: link

1. O Goto é permitido somente quando t̲h̲e̲ S̲h̲e̲l̲l̲ i̲s̲ t̲a̲k̲i̲n̲g̲ c̲o̲m̲m̲a̲n̲d̲s̲ f̲r̲o̲m̲ a̲ f̲i̲l̲e̲.

O que a parte sublinhada significa? Eu não tenho permissão para digitar goto no shell? Mas se goto é escrito em um arquivo, tudo está bem?

2. O arquivo é pesquisado desde o início para uma linha que começa com ':' seguido por um ou mais espaços seguidos pelo rótulo.

Então, se uma parte do meu arquivo se parece com isso

...
goto end
...

Então ele procuraria uma parte como essa : end Mas eu vi alguns scripts e eu acho que eles eram do Unix v6, pareciam sempre assim end: Então qual é a ordem correta?

3. Se tal linha for encontrada, o comando goto retornará. Como o ponteiro de leitura no arquivo de comando aponta para a linha após o rótulo, o efeito é fazer com que o Shell transfira para a linha rotulada.

É legal escrever qualquer outro comando na linha com o ":"? Por exemplo, :end echo "Hello" ou end: echo "Hello"

Obrigado pela sua ajuda e Feliz Natal:)

    
por Joey 26.12.2014 / 02:37

1 resposta

4

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 é como goto 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" e end: echo "hello" , tentarão executar os comandos :end e end: , 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 para goto 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.

    
por 26.12.2014 / 10:57

Tags