Qual é a diferença entre os termos “Shell” e “Bash”?

11

Qual é a diferença entre "Shell" e "Bash" e o que esses termos significam?

Tanto quanto sei, não há diferença. Mas eu vi muitos livros sobre "Shell" e outros sobre "Bash"!

Então, caso eu queira trabalhar com o Terminal no Mac OS X e escrever alguns scripts de bash, estou pensando em que tipo de livros devo ir.

    
por R.Hen 15.10.2012 / 00:42

6 respostas

31

Um " shell " é qualquer software que forneça uma interface para um sistema operacional. Por exemplo, explorer.exe é o shell padrão do Windows (embora existem alternativas ), e no OS X Finder fornece grande parte da mesma funcionalidade. No Linux / * nix, o shell pode fazer parte do ambiente de desktop (como o Gnome ou KDE ), ou pode ser um componente de software separado sobre ele (como Unity ou Canela ).

Os exemplos acima são todos os shells gráficos que usam uma combinação de janelas, menus, ícones e outros elementos para fornecer uma interface gráfica do usuário (GUI) que pode ser interagida com o uso do cursor do mouse. No entanto, no contexto de software como o Bash, ou escrever scripts, "shell" é geralmente usado para significar um interpretador de linha de comando, que executa basicamente os mesmos deveres de um shell gráfico, exceto que é inteiramente baseado em texto.

Bash é um exemplo específico de shell de linha de comando e é provavelmente um dos mais bem conhecidos, sendo o padrão em muitas distribuições Linux, bem como OS X. Ele foi projetado como um substituto para o shell Bourne (Bash significa "Bourne again shell"), um dos primeiros shells Unix .

Exemplos de shells de linha de comando no Windows incluem cmd.exe (também conhecido como Prompt de Comando) e PowerShell .

    
por 15.10.2012 / 00:50
13

Bash é um dos vários shells.

Um shell em um sistema Unix ou similar ao Unix, como o OSX ou o Linux, é um programa aplicativo que fornece uma interface de linha de comando para o sistema operacional, permitindo digitar comandos e executá-los. Há um número de shells diferentes para escolher, mas todos eles fornecem wildcarding, canalização, aqui documentos, substituição de comando, variáveis e estruturas de controle para teste de condição e iteração de nome de arquivo.

O shell original do Unix foi o Bourne shell , escrito por Stephen Bourne no Bell Labs. Depois veio o C shell , escrito por Bill Joy em Berkeley, desde que atualizado como tcsh . Outros shells incluem o shell Korn , ksh, escrito por David Korn, também no Bell Labs, e bash , o" Bourne again shell ", escrito por Brian Fox para o projeto GNU como um substituto gratuito para sh.

Hoje, o bash é provavelmente o shell Unix mais popular, mas muitas pessoas (inclusive eu) ainda preferem o shell C baseado em (o que para alguns de nós parece) sua sintaxe mais agradável. Basicamente, é uma questão de gosto, então eu recomendo ler os artigos da Wikipedia que eu criei para ajudar você a começar.

    
por 15.10.2012 / 01:02
6

O termo 'shell' é bem nomeado. É literalmente um shell ao redor do O / S, permitindo que o usuário interaja com o computador. Quando foi originalmente concebido, havia muito pouca ou nenhuma interface gráfica de usuário (sem janelas :(). Tudo era feito na linha de comando. Mas até mesmo a linha de comando precisava de um lugar para morar. Ela vivia e ainda existe em uma concha. .

Em termos simples, para que a linha de comando seja útil, ela precisava de instruções que pudessem chamar. Então programas foram feitos para rodar dentro do shell para a linha de comando usar. Os programas foram agrupados firmemente em seus próprios pacotes e pretendiam trabalhar juntos. Eles incluem programas como "ls" e "grep", "ps", "sed", etc. Eles também incluem comandos de redirecionamento de arquivos como ">" e "<" e pipes ("|"). Mais importante, eles também incluem construções de programação como operações condicionais (if, then, else, for loops, while loops, maneiras de verificar o status retornado quando você executa uma instrução (por exemplo, se você executar "ls" encontrou algo?), Coisa Curtiu isso). Estes são os fundamentos de scripts de linha de comando (shell) mais complexos e, na verdade, é o que o interpretador de linha de comando é.

Quando alguém usa o termo 'Bash Shell', eles estão falando sobre um interpretador de linha de comando chamado 'Bash' que é executado no shell do O / S. Você poderia pensar nisso como sendo curto para 'Bash Shell Interpreter'. Há outros intérpretes como o Bourne (o Bash é um 'novo e melhorado Bourne Shell e é uma abreviação de Bourne Again Shell). Há também o C-Shell, o K-Shell (favorecido por muitos que escrevem scripts shell complexos), e outras variantes do GNU. Ao longo dos anos, tornou-se habitual referir-se ao interpretador de linha de comando específico que você está usando como shell, porque um não pode ser usado sem o outro. Mas a realidade é que eles são diferentes.

Por que eles são conhecidos como interpretadores de linha de comando e não como o shell real: é porque eles vivem no shell e interpretam todos os comandos como se estivessem rodando em um programa. E o shell não se importa com o interpretador que você executa, contanto que atenda aos padrões corretos.

E por que eles são chamados de intérpretes, é porque eles são realmente intérpretes. Mesmo se você não estiver explicitamente executando um script (e um script é realmente apenas um arquivo de texto de comandos que você cria para que você possa executar os mesmos comandos várias vezes sem ter que digitá-los novamente). Por exemplo, pegue o comando humilde 'ls'. Quando você o executa, ele retorna uma lista de arquivos. Mas como ele é executado é mais importante para a sua pergunta: Ele realmente é executado dentro do contexto do interpretador de linha de comando, mesmo que você apenas execute o que parece ser um simples comando one off. Ou seja, funciona como se fosse uma declaração em parte de um programa maior. Ele é executado como se estivesse em um arquivo de script de script de shell sem realmente estar em um arquivo de script de shell. Um arquivo de script shell anônimo como se fosse.

Qualquer coisa que você execute na linha de comando tem isso em comum (seja um único comando como 'ls' ou um arquivo de script cheio de comandos e iteradores e instruções condicionais): tudo é processado pelo interpretador de linha de comando; seja Bash, C-Shell, K-Shell (padrão no AIX btw).

Para entender o que quero dizer, crie um diretório 'test':

mkdir test

Entre e execute os seguintes comandos

grep hello * 

Você receberá algum tipo de resposta como 'nenhum arquivo ou diretório'. Agora digite o comando

echo $?

($? diz, diga-me o que você encontrou no computador enigmático falar.) Você deve vê-lo retornar um número (deve ser) '2'. Esse é o código de retorno do grep que significa "nenhum tal arquivo ou diretório". Agora execute o seguinte:

echo hello > hello.txt
grep hello *
echo $?

Você verá o arquivo 'hello.txt' retornado do comando grep inicial e deverá ver agora o 'echo $?' retorne o número '0', significando que ele realmente encontrou algo.

Mesmo que esses comandos aparentemente únicos sejam executados, o interpretador de linha de comando age como se fossem parte de um programa maior e rastreie seus valores de retorno. É por isso que se você esquecer o * no final do comando grep, ele não retornará. É sabe que a afirmação é incompleta e espera mais entrada. Afinal, você poderia pedir que ele mostre os resultados de algum loop que é perfeitamente legal para escrever e executar na linha de comando.

A linha inferior é o shell é o shell, e o interpretador (qualquer que seja o nome do que você usa, 'Bash', k-shell, etc.) é diferente. Mas muitas vezes eles são usados de forma intercambiável, porque em qualquer instante eles estão completamente ligados.

    
por 15.10.2012 / 08:15
2

O Shell é uma interface de usuário baseada em texto.

Bash é um tipo de shell.

    
por 18.10.2012 / 17:15
1

bash é uma das famílias shell , mas há muitos outros shells.

Por exemplo, no Minix3 , há o ash shell, ele não suporta matrizes associativas como bash4 .

O padrão POSIX é uma tentativa de criar uma API portátil entre diferentes shells e sistemas operacionais.

Veja o link

    
por 15.10.2012 / 00:50
1

bash é uma das muitas conchas existentes.

Todas as shells têm suas semelhanças e diferenças. Por exemplo, um script escrito em bash pode ser totalmente ou amplamente compatível com outro shell (por exemplo, zsh ).

Devido ao fato de que bash é muito difundido, muitas vezes é implícito que um script é compatível com ele.

Se você quer comprar um livro, compre um escrito especificamente para o shell que você pretende usar. Seria uma boa ideia ler as diferenças antes de gastar dinheiro.

    
por 15.10.2012 / 00:54