Pergunta

Não sou novo no *nix, mas ultimamente tenho passado muito tempo no prompt.Minha pergunta é quais são as vantagens de usar KornShell (ksh) ou Bash Shell?Onde estão as armadilhas de usar um em vez do outro?

Procurando entender da perspectiva de um usuário, em vez de apenas scripts.

Foi útil?

Solução

Bash.

As várias implementações de UNIX e Linux têm várias implementações de ksh em nível de fonte diferentes, algumas das quais são ksh reais, algumas das quais são implementações de pdksh e algumas das quais são apenas links simbólicos para algum outro shell que tenha uma personalidade "ksh".Isso pode levar a diferenças estranhas no comportamento de execução.

Pelo menos com o bash você pode ter certeza de que é uma base de código única, e tudo o que você precisa se preocupar é qual versão (geralmente mínima) do bash está instalada.Tendo feito muitos scripts em praticamente todos os UNIX modernos (e não tão modernos), programar para bash é mais confiável e consistente em minha experiência.

Outras dicas

A diferença entre Kornshell e Bash é mínima.Existem certas vantagens que um tem sobre o outro, mas as diferenças são mínimas:

  • BASH é muito mais fácil de definir um prompt que exibe o diretório atual.Fazer o mesmo em Kornshell é hackeado.
  • Kornshell possui matrizes associativas e BASH não.Agora, a última vez que usei matrizes associativas foi...Deixe-me pensar...Nunca.
  • Kornshell lida com a sintaxe do loop um pouco melhor.Geralmente você pode definir um valor em um loop Kornshell e disponibilizá-lo após o loop.
  • Bash lida com a obtenção de códigos de saída de pipes de uma maneira mais limpa.
  • Kornshell tem o print comando que é muito melhor que o echo comando.
  • Bash tem conclusões de tabulação.Em versões mais antigas
  • Kornshell tem o r comando de histórico que me permite executar novamente comandos antigos rapidamente.
  • Kornshell tem a sintaxe cd old new que substitui old com new em seu diretório e CDs ali.É conveniente quando você está em um diretório chamado /foo/bar/barfoo/one/bar/bar/foo/bar e você precisa fazer um cd para /foo/bar/barfoo/two/bar/bar/foo/bar Em Kornshell, você pode simplesmente fazer cd one two e acabar com isso.No BASH, você teria que cd ../../../../../two/bar/bar/foo/bar.

Sou um cara antigo do Kornshell porque aprendi Unix na década de 1990, e esse era o shell preferido naquela época.Posso usar o Bash, mas às vezes fico frustrado com isso porque, por hábito, uso alguns recursos menores que o Kornshell possui e que o BASH não funciona e não funciona.Então, sempre que possível, defino o Kornshell como padrão.

No entanto, vou dizer para você aprender BASH.O Bash agora está implementado na maioria dos sistemas Unix, bem como no Linux, e há simplesmente mais recursos disponíveis para aprender o BASH e obter ajuda do que o Kornshell.Se você precisar fazer algo exótico no BASH, você pode acessar o Stackoverflow, postar sua pergunta e obterá uma dúzia de respostas em poucos minutos - e algumas delas até estarão corretas!

Se você tiver uma pergunta sobre Kornshell e postá-la no Stackoverflow, você terá que esperar que algum hacker antigo como eu acorde de seu cochilo antes de obter uma resposta.E esqueça de receber qualquer resposta se eles estiverem servindo pudim no asilo naquele dia.

BASH é simplesmente a escolha certa agora, então se você precisa aprender alguma coisa, é melhor escolher o que é popular.

Sou um veterano do Korn Shell, então saiba que falo dessa perspectiva.

No entanto, estou confortável com Bourne Shell, ksh88 e ksh93 e, na maioria das vezes, sei quais recursos são suportados em quais.(Devo pular o ksh88 aqui, pois ele não é mais amplamente distribuído.)

Para uso interativo, leve o que for adequado à sua necessidade.Experimentar.Gosto de poder usar o mesmo shell para uso interativo e para programação.

Passei do ksh88 no SVR2 para o tcsh, para o ksh88sun (que adicionou suporte significativo à internacionalização) e o ksh93.Eu tentei Bash e odiei porque achatava minha história.Então eu descobri shopt -s lithist e tudo estava bem.(O lithist A opção garante que as novas linhas sejam preservadas no seu histórico de comando.)

Para programação shell, eu recomendo seriamente o ksh93 se você deseja uma linguagem de programação consistente, boa conformidade com POSIX e bom desempenho, já que muitos comandos unix comuns podem estar disponíveis como funções integradas.

Se você deseja portabilidade, use pelo menos ambos.E certifique-se de ter um bom conjunto de testes.

Existem muitas diferenças sutis entre os shells.Considere, por exemplo, a leitura de um cano:

b=42 && echo one two three four |
    read a b junk && echo $b

Isso produzirá resultados diferentes em shells diferentes.O korn-shell executa pipelines de trás para frente;o último elemento do pipeline é executado no processo atual.O Bash não suportava esse comportamento útil até a v4.x e, mesmo assim, não é o padrão.

Outro exemplo que ilustra consistência:O echo comando em si, que se tornou obsoleto pela divisão entre BSD e SYSV unix, e cada um introduziu sua própria convenção para não imprimir novas linhas (e outros comportamentos).O resultado disso ainda pode ser visto em muitos scripts de ‘configuração’.

Ksh adotou uma abordagem radical em relação a isso - e introduziu o print comando, que na verdade suporta ambos os métodos (o -n opção do BSD, e o final \c caractere especial do SYSV)

No entanto, para programação de sistemas sérios, eu recomendaria algo diferente de um shell, como python, perl.Ou dê um passo adiante e use uma plataforma tipo fantoche - que permite observar e corrigir o estado de clusters inteiros de sistemas, com boa auditoria.

A programação da Shell é como nadar em águas desconhecidas, ou pior.

Programar em qualquer linguagem requer familiaridade com sua sintaxe, interfaces e comportamento.A programação Shell não é diferente.

Não tenho experiência com ksh, mas usei bash e zsh.Eu prefiro zsh ao bash por causa de seu suporte para globbing de arquivos muito poderoso, modificadores de expansão variável e preenchimento de guias mais rápido.

Aqui está uma introdução rápida: http://friedcpu.wordpress.com/2007/07/24/zsh-the-last-shell-youll-ever-need/

Esta é uma espécie de batalha entre Unix e Linux.A maioria, senão todas as distribuições Linux, têm o bash instalado e o ksh opcional.A maioria dos sistemas Unix, como Solaris, AIX e HPUX possuem ksh como padrão.

Pessoalmente eu sempre uso o ksh, adoro a conclusão do vi e praticamente uso o Solaris para tudo.

Para scripts, eu sempre uso ksh porque suaviza Pegadinhas.

Mas eu acho festa mais confortável para uso interativo.Para mim o emacs combinações de teclas e preenchimento de guias são os principais benefícios.Mas isso é principalmente força de hábito, não qualquer problema técnico com ksh.

@foxxtrot

Na verdade, o shell padrão é o Bourne Shell (sh). /bin/sh no Linux é na verdade bash, mas se você deseja scripts de plataforma cruzada, é melhor seguir os recursos do Bourne Shell original ou escrevê-lo em algo como perl.

Minha resposta seria ‘escolha um e aprenda como usá-lo’.Ambos são conchas decentes;bash provavelmente tem mais recursos, mas ambos têm os recursos básicos que você deseja.bash está mais universalmente disponível atualmente.Se você usa Linux o tempo todo, continue assim.

Se você estiver programando, tentar manter o 'sh' simples para portabilidade é uma boa prática, mas com o bash disponível tão amplamente hoje em dia, esse conselho provavelmente é um pouco antiquado.

Aprenda como usar o preenchimento e seu histórico de shell;leia a página de manual ocasionalmente e tente aprender algumas coisas novas.

Por um lado, o bash possui preenchimento de tabulação.Isso por si só é suficiente para me fazer preferir o ksh.

Concha Z tem uma boa combinação dos recursos exclusivos do ksh com as coisas legais que o bash oferece, além de muito mais coisas além disso.

Disponível na maioria dos sistemas UNIX, o ksh é compatível com os padrões, claramente projetado e completo.Acho que livros, ajuda em ksh são suficientes e claros, principalmente o livro de O'Reilly.Bash é uma massa.Eu o mantenho como shell de login root apenas para Linux em casa.

Para uso interativo, prefiro zsh no Linux/UNIX.Eu executo scripts em zsh, mas testarei a maioria dos meus scripts, mas funções no AIX ksh.

Bash é o benchmark, mas isso ocorre principalmente porque você pode ter certeza de que ele está instalado em todos os *nix existentes.Se você planeja distribuir os scripts, use Bash.

Infelizmente, não consigo abordar as diferenças reais de programação entre os shells.

Bash é o padrão para Linux.
Minha experiência é que é mais fácil encontrar ajuda para o bash do que para o ksh ou csh.

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top