Como o shell processa o conteúdo da linha de comando para executar?

1

Como o shell processa o conteúdo da linha de comando para executar?

  1. Comando primeiro e depois opção e argumentos.
  2. Dividindo a linha de comando em segmentos.
  3. Processos do começo ao fim.
por MAK 03.03.2016 / 15:22

3 respostas

1

"shell" é uma palavra genérica para bash , ksh , zsh e todos.

Para todos os shells, há uma página man (por exemplo, man bash ) que detalha como o comando é expandido antes da execução (variável $foo são substituídos por conteúdo, fu* em substituído por fun funny (desde esses arquivos exixts) e afins).

Você pode depurar comandos simples usando

echo my-command ${foo} fu*

Um comando mais complexo (por exemplo, com um pipe ( | )) pode ser depurado definindo set -x antes do comando.

set -x
my-command ${foo} fu* | while read x 
do

done
set +x

No entanto, isso parece um problema XY .

    
por 03.03.2016 / 16:25
1

O primeiro campo na linha de comando é o comando a executar, referenciado pela variável especial $0 . O que quer que venha depois disso, são apenas argumentos simples para o executável, conhecido como $1 , $2 , ... $n , e é responsabilidade do $0 lidar com eles, não com os da shell

    
por 03.03.2016 / 15:54
1

O processo de análise (como é chamado) de uma linha de comando é um processo bastante longo e complexo que precisa de um sub-capítulo de um livro para torná-lo justo como descrito aqui para ksh (por exemplo).

Em geral, em termos muito simples (que não fazem justiça a muitos detalhes necessários), cada token (uma palavra limitada principalmente por espaços), depois de ser identificado como um argumento, é processado da esquerda para a direita e então dado ao comando como argumentos expandidos (re-indicações são especiais).

Por favor, leia o livro para uma melhor descrição, entenda que o acima é muito simplista.

    
por 04.03.2016 / 01:17