Qual é a diferença entre terminal e bash? [duplicado]

3

Quando abro a janela do Terminal no Mac OS X, posso digitar bash e apertar enter e verei:

Last login: Fri Feb 20 14:30:56 on ttys000
Korays-MacBook-Pro:~ koraytugay$ bash
bash-3.2$ 

Por exemplo, posso executar comandos como ls ou ls -l no Terminal e no "bash-3.2 $"

O que é o bash em execução no Terminal e o próprio Terminal?

    
por Koray Tugay 20.02.2015 / 13:59

3 respostas

3

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.

    
por 23.02.2015 / 19:52
7

Um terminal, uma vez literalmente , significava uma caixa que você digitou, conectada remotamente a um mainframe.

Na verdade, o seu 'terminal' moderno possivelmente emula um desses

Os'terminais'modernossão emuladores de terminal que se comportam mais ou menos como um terminal padrão. Então você está executando o xterm , rxvt ou qualquer outra coisa. O terminal fornece um mecanismo para inserir comandos.

Você executa um processador de comandos, ou shell , acima disso - bash , fish , csh ou outros. Isso é o que realmente transforma o texto que é digitado no terminal em instruções que o computador age. A maioria dos shells permite scripts, e você veria uma sintaxe muito diferente entre say bash ou csh. Eles funcionariam de forma semelhante em terminais diferentes.

    
por 20.02.2015 / 14:38
1

veja também link .

Você pode tentar echo $0 ou echo $SHELL para descobrir qual shell está sendo executado na sua janela do emulador de terminal.

    
por 23.02.2015 / 21:39