Terminal vs bash? [duplicado]

23

Estou em um Mac, mas acho que isso geralmente é aplicável ao Unix.

Estou no processo de aprender scripts de shell e há algo que parece estar faltando. Quando estou no terminal comum, posso usar a sintaxe de script como for loops e tal em conjunto com comandos para fazer coisas.

Mas .... bash abre um interpretador para scripts de shell.

Qual é o lugar onde eu me confundo, porque não é o terminal já um interpretador para shell de script, como demonstrado pelo fato de que o script funciona quando dado a stdin?

Pergunta de bônus: como bash é diferente de bash -i , que de acordo com man "inicia uma sessão interativa" ..... não é isso que acontece quando você digita bash sozinho ? Que, aos meus olhos não é diferente de estar no terminal normal em primeiro lugar ...

    
por Aerovistae 25.01.2015 / 10:02

3 respostas

27

Quando você inicia um terminal, ele sempre executa algum programa dentro dele. Esse programa geralmente será, por padrão, seu shell. No OS X, o shell padrão é o Bash. Em combinação, isso significa que quando você inicia o Terminal, você obtém uma janela do emulador de terminal com bash sendo executado dentro dela (por padrão).

Você pode alterar o shell padrão para outra coisa, se quiser, embora o OS X seja fornecido somente com bash e %código%. Você pode optar por iniciar um comando personalizado em um novo terminal com tcsh comando :

open -b com.apple.terminal somecommand

Nesse caso, o seu shell não está em execução, e quando o comando personalizado termina, isso é o fim das coisas.

Se você executar open dentro do seu terminal que já está executando bash , você terá exatamente isso: um shell executando outro. Você pode sair do shell interno com Ctrl-D ou bash e voltará para o shell em que você começou. Isso pode ser útil se você quiser testar alterações de configuração ou personalizar seu ambiente temporariamente - quando você sai da concha interna, as mudanças que você fez vão embora. Você pode aninhá-los arbitrariamente profundamente. Se você não está fazendo isso, não há nenhum ponto real em lançar outro, mas um comando como exit executará apenas aquele script e então sairá, o que geralmente é útil.

As diferenças entre shells interativos e não interativos são um pouco sutis e lidam principalmente com quais arquivos de configuração são carregados, quais comportamentos de erro existem e se os aliases e similares estão habilitados. O princípio básico é que um shell interativo fornece as configurações que você deseja para se sentar na frente dele, enquanto um shell não interativo fornece o que você deseja para um script autônomo. Todas as diferenças são documentadas explicitamente no Manual de referência do bash , e também em uma pergunta dedicada neste site .

Na maior parte, você não precisa se importar. Não há sempre um motivo para lançar outro shell e, quando você fizer isso, terá um propósito específico em mente e saberá o que fazer com ele.

    
por 25.01.2015 / 10:21
26

A máquina nesta foto é um terminal (de vídeo), mais especificamente um VT100 por Digital Equipment Corporation

Décadasatrás,quandooscomputadoreseramgrandes,emvezdetercomputadorespessoaisparacadausuário,elespoderiamterumterminal,umdispositivofictíciocomtelaeteclado,conectadoaumcomputadorprincipalpormeiodeumcabo.UmVT100nãoéumcomputador,masapenasumtecladoeummonitor.Geralmente,haviaváriosdelesconectadosaumúnicocomputador.

Assim,décadasatrás,umcomputadorUnixeraacessadopormeiodeumterminal,queeraumdispositivofísico.Àmedidaqueocomputadorpessoalsurgia,easinterfacesgráficasdousuáriosetornavamcomuns,havia(eaindaé)umamaneiradeacessaralinhadecomandodoUnixcomosefosseumdispositivodeterminal-aplicativoschamadosemuladordeterminal.OprogramaTerminalnoOSXéumemuladordeterminal;amaioriadosemuladoresdeterminaldosdiasatuaisaindaemulamessemesmodispositivoVT100deperto,ouseja,amaioriadosprogramasexecutadosemumajaneladoaplicativoTerminaléexatamenteamesmaquepareceriaserodassenograndecomputadordosanos70eosdadosexibidosemtaldispositivoterminal.Paraosprogramas,ajanelaeachdoemuladordeterminalsecomportacomoumdessesdispositivos;amaioriadosprogramasdelinhadecomandonãonotouadiferença(emborasejadifícilconectarumVT100genuínoaoseuMBP).

Umterminaldevídeoeraosucessordeumdispositivochamadoterminaldecópiaimpressa,umdispositivoqueteriaumtecladoeumaimpressora-todaasaídadosprogramasseriaimpressanopapel.Pode-seimaginarqueumterminaldevídeofoiumagrandemelhoriaemrelaçãoaessesdispositivos.Umexemplodeumterminalimpresso,umASRTeleTypeModel33:

Este dispositivo também foi chamado teletypewriter , teletyper , ou tty para breve; e o tty ficou preso no começo dos anos 70, e a interface para tal dispositivo, ou emulador de terminal, ainda é chamada de tty , e em muitas linguagens de programação produzindo texto para exibição em uma janela de terminal ainda é chamado de "impressão"; originalmente não era uma metáfora, mas um fato.

O shell sempre esteve lá - desde o surgimento do Unix, foi o programa que foi executado depois que você digitou seu nome de login e senha no terminal, para acessar o computador central. O primeiro programa shell foi o shell Thompson ( sh ) de 1971, que em 1977 foi substituído por Bourne shell , também chamado sh . Inicialmente, ele foi projetado para que este fosse apenas outro programa que pudesse ser atualizado facilmente, e que os usuários pudessem rodar seu próprio programa ao invés do shell padrão.

O projeto GNU então produziu a partir do zero um shell aprimorado chamado bash , abreviação de Bourne-again shell , que a Apple decidiu enviar com o MacOS X também.

Nos anos 70, a distinção era clara: um terminal era o que parecia ser uma peça de ferro maciço de 30 kg envolta em estojo plástico de cor creme com visor de vidro e teclado à sua frente, ou mesmo um dispositivo com apenas um teclado e uma impressora, enquanto um shell era um programa em execução no computador principal, interpretando seus comandos.

    
por 25.01.2015 / 20:49
7

Você está sentindo falta do seu terminal já estar executando bash (ou outro interpretador de shell) em primeiro lugar.

Um terminal e mais precisamente um emulador de terminal no seu caso é apenas um dispositivo passando as teclas digitadas para um programa subjacente e exibindo quaisquer caracteres que forem enviados para ele. Enquanto ele executa um shell por padrão, o nothings proíbe iniciar um terminal executando um aplicativo de texto diferente, como um editor de texto ou qualquer outra coisa.

Se você já estiver em uma sessão interativa, executar bash e bash -i de fato não fará diferença.

    
por 25.01.2015 / 10:20