Command-line shell (Português)

From ArchWiki
Status de tradução: Esse artigo é uma tradução de Command-line shell. Data da última tradução: 2020-04-14. Você pode ajudar a sincronizar a tradução, se houver alterações na versão em inglês.

Do Wikipédia:

Um shell do Unix é um interpretador de linha de comando ou shell que fornece uma interface semelhante ao Unix tradicional. Os usuários indicam a operação do computador pela entrada de comandos como texto para um interpretador de linha de comando executar, ou criando scripts de texto de um ou mais de tais comandos.

Lista de shells

Shells que são mais ou menos compatíveis com POSIX são listados sob #Compatíveis com POSIX, enquanto shells que têm uma sintaxe diferente estão sob #Shells alternativos.

Compatíveis com POSIX

Esses shells podem todos serem vinculados a /usr/bin/sh. Quando Bash, mkshAUR e zsh são chamados com o nome sh, eles se tornam mais compatíveis com POSIX.

  • Bash — O Bash estende o shell Bourne com histórico e conclusão de linha de comando, arrays indexados e associativos, aritmética de inteiros, substituição de processos, strings here, correspondência de expressões regulares e expansão de chaves.
https://www.gnu.org/software/bash/ || bash
  • DASH — Descendente da versão do NetBSD do Almquist SHell (ash). Um shell rápido compatível com POSIX que pretende ser o menor possível.
http://gondor.apana.org.au/~herbert/dash/ || dash
  • Korn shell — O KornShell possui uma linguagem de programação completa, poderosa e de alto nível para escrever aplicativos, muitas vezes mais fácil e rápido do que com outras linguagens de alto nível. Isso o torna especialmente adequado para prototipagem. O ksh tem as melhores características do Bourne shell e do C shell, além de muitos novos recursos próprios. Assim, o ksh pode fazer muito para melhorar sua produtividade e a qualidade do seu trabalho, tanto na interação com o sistema quanto na programação. Os programas ksh são mais fáceis de escrever e são mais concisos e legíveis do que os programas escritos em linguagem de nível inferior, como C.
http://www.kornshell.com || Veja o artigo
  • Zsh — Shell projetado para uso interativo, embora também seja uma poderosa linguagem de script. Muitos dos recursos úteis de Bash, ksh e tcsh foram incorporados no Zsh; vários recursos originais foram adicionados. O documento introdutório detalha alguns dos recursos exclusivos do Zsh.
https://www.zsh.org/ || zsh
Dica: Scripts POSIX e Bash podem ser linted com shellcheck.

Shells alternativos

  • C shell — Interpretador de linguagem de comando que pode ser usado tanto como um shell de login interativo quanto como um processador de comando de script de shell. Inclui um editor de linha de comando, completação de palavra programável, correção ortográfica, mecanismo de histórico, controle de trabalho e uma sintaxe tipo C.
https://www.tcsh.org || tcsh
  • Elvish — Elvish é um shell moderno e expressivo, que pode carregar valores internos estruturados por meio de pipelines. Esse recurso torna possível evitar um monte de código complexo de processamento de texto. Isso permite uma linguagem de programação mais efetiva, com recursos como exceções, espaço de nome e funções anônimas. Ele também possui um readline poderoso que verifica a sintaxe enquanto digita, e realce de sintaxe por padrão.
https://elvish.io || elvish
  • fish — Shell de linha de comando inteligente e amigável. O fish executa o realce da sintaxe da linha de comando em cores, bem como o realce e a completação dos comandos e dos argumentos, da existência do arquivo e do histórico. Ele oferece suporte à completação na medida em que você escreve para o histórico e os comandos. O fish é capaz de analisar as páginas man do sistema para determinar argumentos válidos para comandos, permitindo que ele realce e complete os comandos. Uma revisão fácil do último comando pode ser feita usando Alt+Up. O daemon de fish (fishd) facilita ter um histórico sincronizado em todas as instâncias do fish, bem como variáveis de ambiente universais e persistentes. Além disso, fish possui sintaxe de programação significativamente simplificada e fluxo de controle (similar ao ruby). Para mais informações, veja o tutorial.
https://fishshell.com/ || fish
  • Nash — Nash é um shell do sistema, inspirado pelo rc do plan9, que facilita a criação de scripts confiáveis e seguros, aproveitando os namespaces dos sistemas operacionais (no linux e no plan9) de forma idiomática.
https://github.com/NeowayLabs/nash || nash-gitAUR
  • Oh — Shell de Unix escrito em Go. É semelhante em espírito, mas diferente em detalhes de outros shells de Unix. Oh, estende os recursos da linguagem de programação do shell sem sacrificar os recursos interativos do shell.
https://github.com/michaelmacinnis/oh || oh-gitAUR
  • PowerShell — O PowerShell é uma linguagem de programação orientada a objetos e um shell de linha de comando interativo, originalmente escrito para e exclusivo para o Windows. Mais tarde, foi aberto e portado para Mac OS X e Linux.
https://github.com/PowerShell/PowerShell || powershellAUR
  • rc — Interpretador de comando para o Plan9 que fornece recursos semelhantes ao Bourne shell do UNIX, com algumas pequenas adições e menos sintaxe idiossincrática.
http://doc.cat-v.org/plan_9/4th_edition/papers/rc || 9base-gitAUR
  • xonsh — AUm shell retrocompatível com base no interpretador python.
https://xon.sh/ || xonsh

Alterando seu shell padrão

Depois de instalar um dos shells acima, você pode executar esse shell dentro do seu shell atual, apenas executando o executável. Se você quiser ser servido nesse shell quando você fizer login no entanto, você precisará alterar seu shell padrão.

Para listar todos os shells instalados, execute:

$ chsh -l

E para definir um como padrão para seu usuário, faça:

$ chsh -s caminho-completo-do-shell

sendo caminho-completo-do-shell é o caminho completo como fornecido em chsh -l.

Se você agora você encerrar a sessão e iniciá-la novamente, você será saudado pelo outro shell.

Dica: chsh usa /etc/shells como referência. Se um shell instalado recentemente não estiver presente na lista, ele pode ser manualmente adicionado a este arquivo.

Arquivos de configuração

Para iniciar automaticamente programas no console ou no login, você pode usar os arquivos/diretórios de inicialização do shell. Leia a documentação do seu shell, ou seu artigo do ArchWiki, p. ex., Bash#Configuration files ou Zsh#Startup/Shutdown files.

Veja também arquivos de configuração.

/etc/profile

Após o login, todas os shells compatíveis com Bourne usam /etc/profile, o que, por sua vez, origina qualquer arquivo *.sh legível em /etc/profile.d/: estes scripts não requerem uma diretiva de interpretador, nem precisam ser executáveis. Eles são usados para configurar um ambiente e definir configurações específicas do aplicativo.

Padronização

É possível fazer com que os arquivos de configuração de shells (alguns) sigam a mesma convenção de nomenclatura, além de ter suporte a alguma configuração comum entre os shells.

Veja o artigo sobre isso e o repositório relacionado.

Entrada e saída

Veja também GregsWiki e Redirecionamento de E/S.

  • Redirecionamentos truncam arquivos antes que os comandos sejam executados:
    comando arquivo > arquivo
    não funcionará como esperado. Enquanto alguns comandos (sed, por exemplo) fornecem uma opção para editar arquivos no local, isso não acontece para muitos outros. Nesses casos, você pode usar o comando sponge(1) do pacote moreutils.
  • Como o cat não está embutido no shell, em muitas ocasiões você pode achar mais conveniente usar um redirecionamento, por exemplo, em scripts, ou se você se importa muito com desempenho. De fato, < arquivo faz o mesmo que cat arquivo.
  • Shells compatíveis com POSIX possuem suporte a Here Documents:
$ cat << EOF
um
dois
três
EOF
  • Pipelines de shells operam no stdout por padrão. Para operar no stderr(3), você pode redirecionar stderr para stdout com comando 2>&1 | outrocomando ou, para Bash 4, comando |& outrocomando.
  • Lembre-se que muitos utilitários principais do GNU aceitam arquivos como argumentos, então, por exemplo, grep padrão < arquivo pode ser substituído por grep padrão arquivo.

Veja também