Como o bash executa comandos?

3

Esta é mais uma questão geral sobre a qual eu tenho curiosidade, mas de forma simples: como o bash executa comandos dados através de um script ou terminal?

Seria possível, eu acho, ter um monte de instruções if verificando todos os comandos como (Pseudocode):

if (command == "pwd") pwd();
else if (command == "echo") echo();
...

Mas isso criaria problemas já que você teria que recompilar o código toda vez que adicionar um novo comando, como um iniciado para um programa como o firefox ou gedit.

Depois me lembrei do comando which , que (sem trocadilho) aponta para o diretório de um determinado comando, me fazendo supor que o bash simplesmente procura por um arquivo e o pega com um iostream para executá-lo.

Este é o caso, e se sim, como ele sabe qual método chamar, ou eles são simplesmente executáveis genéricos?

    
por codedcosmos 01.02.2018 / 23:30

2 respostas

3

Basicamente, alguns comandos são embutidos no próprio programa bash shell (por exemplo, echo, set), neste caso, o bash já tem o código compilado nele para executar esses comandos internamente, em resposta a um usuário chamando-os do linha de comando. Se você olhar o manual em man bash ou info bash , ele terá uma lista dos 'builtins'.

Se um comando não for encontrado nos builtins, o shell pesquisará os diretórios listados na variável de ambiente $ PATH (na ordem listada), para ver se ele pode encontrar um comando externo lá. Caso contrário, informará um erro de que o comando não pode ser encontrado.

    
por 01.02.2018 / 23:49
3

Como o interior funciona se um comando existir: ele está apenas usando uma entrada padrão regular para armazenar os comandos - ou de script ou não - e seus argumentos, e então analisa-os para que possam ser enviados para uma chamada de sistema como execve que irá encontrar o comando no sistema e depois executá-lo:

link

Além disso, como o Time4Tea disse, há alguns comandos incorporados que são exclusivos do shell que você está executando. exit é um deles.

Como regra geral, se houver algo sobre o Linux que você não pode conhecer de forma regular, basta usar o código-fonte.

    
por 01.02.2018 / 23:44