Bash é um dos populares shells de linha de comando , programas cujo trabalho principal é iniciar outros programas (além de algumas funções auxiliares).
A parte da linha de comando significa que você a controla digitando comandos uma linha por vez.
Corretamente falando, uma GUI que você usa para iniciar programas clicando duas vezes nos ícones também é um shell, mas na prática, por pessoas "shell", na maioria das vezes, as da linha de comando.
Todas as shells de linha de comando modernas recebem sua entrada e enviam sua saída como fluxos abstratos de caracteres, e as outras extremidades dessas streams podem ser conectadas a um teclado, uma impressora, um arquivo, outro programa. O shell na maioria das vezes não se importa - ele lê os caracteres, interpreta-os como comandos que dizem para executar outros programas e escreve caracteres como "comando não encontrado" . Quando ele executa outro programa, por padrão, ele conecta as entradas e saídas desse programa aos mesmos fluxos.
Agora, o Terminal é um programa que fornece uma interface gráfica entre o shell e o usuário. Recebe da casca, e. os caracteres "comando não encontrado" e descobre como exibi-los para você - com qual fonte, onde na tela, em que cor, se deve haver uma barra de rolagem. Quando você pressiona algumas teclas, descobre se deseja enviá-las para o shell como caracteres (por exemplo, ls -l
) ou para interpretá-las por conta própria (por exemplo, ⌘C).
Quando você abre o aplicativo Terminal, ele abre automaticamente um shell para conectá-lo. Em suas configurações, você pode escolher um shell diferente do Bash. Se você está se sentindo atrevido, você pode até mesmo fazer com que ele use um programa que não é um shell - não é muito útil, mas demonstra como o Terminal se preocupa apenas em passar caracteres para dentro e para fora, não sobre o que o shell faz com eles .
O que acontece quando você digita bash
no Bash (por meio do Terminal)? Ele inicia o programa Bash - ou seja, outra cópia de si mesmo dentro de si.
ETA: O prompt que o Bash oferece antes de você digitar cada comando é facilmente personalizável e controlado (usando um formato especial) pela variável PS1
. Tente digitar echo $PS1
na instância pai e filho do Bash.
Quando executado a partir do aplicativo Terminal, essa variável é configurada para solicitar o nome da máquina, o diretório e o usuário. Isso está configurado para você em /etc/bashrc
, mas você pode definir um novo valor, idealmente em ~/.bash_profile
. NB isso é um pouco específico do OSX; na maioria dos outros sistemas, você preferiria ~/.bashrc
para isso.
Quando você apenas executa uma instância filho do Bash, /etc/bashrc
não é executado novamente, portanto, essa variável não está definida. Ele também não é configurado para ser herdado por shells filho (o que é totalmente uma coisa para variáveis de ambiente), então o Bash reverte para o padrão inútil de apenas mostrar a você qual versão dele está rodando.