Comparação de shell do Unix

9

Dos principais shells do Unix (bash, ksh, tcsh, zsh, outros?), Existem razões convincentes para usar um sobre o outro?

  • Qual é o mais interativo / amigável à linha de comando?
  • Qual é o mais propício / intuitivo para escrever scripts?
  • Existem recursos principais que um shell oferece e outros não?
  • Alguma dessas conchas é realmente boa para um tipo de função, mas não para outra? Ou eles são todos bem-arredondados / flexíveis?
  • É apenas uma questão de preferência pessoal?

Eu posso criar este wiki da comunidade se alguém preferir.

Andy White
fonte

Respostas:

17

Atual:

  • bash- Bourne novamente shell, shell padrão na maioria das distribuições Linux. Recursos decentes;
  • zsh - o mais rico em recursos, mas ainda raramente usado;
  • ksh - shell padrão no Solaris, AIX e outros poucos unices;
  • tcsh - shell padrão em várias unidades de sabor * BSD;

Histórico:

  • sh- shell Bourne original (lançado em 1977). Obsoleto pela festança;
  • csh- shell C original (lançado em 1978). Obsoleto por tcsh e ksh;

Observe que bash, ksh e zsh derivam da sintaxe sh, enquanto tcsh deriva da sintaxe csh. Essas são duas sintaxes bem diferentes.

O gráfico de recursos (wiki).

vartec
fonte
A maioria dos scripts geralmente é escrita para ser compatível com sh, pois o lançamento de um script via sh geralmente é muito mais rápido que o bash.
Mikeage
Como é isso? No Linux / bin / sh está o link simbólico para / bin / bash.
Vartec
2
/ bin / sh não é sempre um link simbólico para bin / / bash
Brad Gilbert
1
Quando você instancia o bash como "sh", ele é executado no modo "sh" que suporta um subconjunto de comandos do bash. Eu acredito que a sintaxe "sh" é um padrão POSIX.
Duffbeer703
No Debian você pode usar 'dash' como substituto de '/ bin / sh'.
drybjed
9

fish é uma nova concha que talvez seja mais interessante que as outras, não porque necessariamente tenha mais recursos, mas porque eles simplesmente funcionam por padrão e porque o peixe se esforça para ser mais fácil.

Algumas capturas de tela ( 1 , 2 , 3 , 4 ) são suficientes para dar uma idéia geral.

fish agora é o shell padrão no meu Mac no trabalho. Vai saber.

Peter Hilton
fonte
2

Se você quiser aprender um shell que não seja sh/ bash, é melhor continuar com ele zsh. Eu não acho que alguém contesta seriamente que é a concha alternativa mais poderosa e cheia de recursos; se é apenas inchaço, é claro, ainda está em debate.

Ouvi coisas boas fish, mas nunca trabalhei no esforço de me preocupar com elas.

Os administradores que conheço consideram cshe tcshdevem ser abominações que devem ser evitadas a todo custo, e eu concordo com eles, apesar de nunca terem sido forçados a me colocar em nenhuma das partes.

kquinn
fonte
2

Eu recomendaria conhecer bem o bash, pois é um dos mais comuns (geralmente o padrão do Linux). Pessoalmente, eu amo o zsh como meu shell interativo. Possui ótimos recursos de conclusão. Por exemplo, você pode definir uma lista de hosts e quando fizer algo como ssh Ser [tab], ele saberá tentar tabular automaticamente a conclusão de um desses hosts. Ele também possui globos recursivos, portanto, se você quiser encontrar todos os arquivos jpeg no atual e subdiretório, poderá usá-lo ls -ld **/*.jpg. Existem muitos recursos divertidos com o zsh (procure os arquivos .zshrc das pessoas) e você pode configurá-lo como 'compatível com bash', para que seja fácil alternar entre os dois. Se você combinar isso com o GNU Screen, poderá achar que a linha de comando se torna um prazer para trabalhar.

Kyle Brandt
fonte
1

Não esqueça sua outra pergunta Shell mais comum do Unix / Linux - o shell mais popular é provavelmente o mais popular por uma razão ;-)

Pelo que vale a pena, a maioria das pessoas não alterna entre conchas com frequência, por isso será difícil obter uma comparação abrangente das várias opções; será mais provável que você veja pessoas diferentes defendendo as virtudes de suas conchas favoritas. Pelo pouco que ouvi sobre shells diferentes, todos eles oferecem alguns dos mesmos recursos básicos (como redirecionamento de E / S, histórico de comandos etc.), de modo que a preferência pessoal provavelmente será um grande componente.

David Z
fonte
1

Um motivo convincente para usar o ZSH que não foi mencionado é o modo vi e o modo emacs .

Para quem gosta de usar sua memória muscular vi no shell, esse é um recurso matador.

E para aqueles que preferem o emacs, você também pode usar essas teclas, mas os verdadeiros crentes do emacs provavelmente diriam que o emacs é o seu shell favorito.

;-)

Somantra
fonte
0

A preferência pelo uso diário é realmente uma questão de gosto pessoal; no entanto, ao escrever scripts, tento ser compatível com posix por questões de portabilidade.

Vincent De Baere
fonte
0

Assim como o Heads Up: O Ubuntu padroniza "sh" para "dash", o que levou a alguns problemas no passado com a compatibilidade do POSIX. Aparentemente, os comandos de eco diferem um pouco.

lImbus
fonte