Existe alguma razão para usar o bash sobre o zsh? [fechadas]


33

Estou curioso para saber por que alguém iria querer executar o bash em vez do zsh. Quero dizer, o zsh é totalmente compatível com o bash. Não me interpretem mal: eu não gosto de bash ou qualquer coisa. Eu realmente quero saber se existem vantagens em usá-lo no zsh.

Então, qual o motivo para usar o bash sobre o zsh?


2
Só queria salientar que o ZSH não é totalmente compatível com o BASH. No ZSH, a indexação de matriz começa em 1 - no BASH, a indexação de matriz começa em 0. Existem outras diferenças também, mas eu queria destacar essa.
Charles Addis

Respostas:


29

Duas razões vêm à mente:

Primeiro - está disponível praticamente em qualquer lugar. Eu tenho vários sistemas Linux (CentOS 4.x nesse caso) que não possuem o zsh instalado. Da mesma forma, eu tenho que tocar em sistemas antigos como Solaris 2.6 e versões posteriores, HP-UX 10 e versões posteriores e igualmente barulhentas do AIX. Portanto, eu praticamente preciso usar o bash nesses computadores, o que uso porque toco dezenas, senão centenas, em computadores individuais ao longo de um mês. Para obter consistência na interface, você acaba ficando preso usando o padrões.

Segundo - está disponível praticamente em qualquer lugar. Isso significa que posso escrever um script shell bash e ter 99% de certeza de que funcionará quando transferido para outro lugar.

Sim, esses motivos são superficialmente os mesmos, mas o raciocínio por trás deles é diferente.


2
Lembro-me de ter o ksh88 / ksh93 no HPUX, nunca tivemos acesso à instalação do bash.
Zlemini

24

O Bash geralmente vem com todos os sistemas, o zsh não. Eu amo o zsh, mas, por causa disso, uso o zsh para uso interativo, mas o Bash para todos os meus scripts .

Acho que isso mantém tudo mais simples, pois mesmo quando compro o que for compatível com o bash (defina SH_WORD_SPLIT?), Ainda encontro diferenças sutis.


3
Isso seria todo sistema GNU / Linux que você quer dizer?
Andol

2
Bem, eu descobri que ele vem com o OS / X e o bsd, não tenho muita experiência com outros * nix's, eles (versões recentes) geralmente não têm bash?
Kyle Brandt

1
As versões anteriores do Solaris não incluíam o bash; Normalmente, eu tinha que depender de Bourne ser o shell para scripts. Esse não é o caso há um tempo, mas você ainda pode encontrá-lo em algumas grandes empresas.
User5336

3
Deve ter sido diferente BSD: s então. Pelo menos no OpenBSD e no FreeBSD você deve instalar o bash separadamente dos ports / packages.
Andol

andol: Esses são os que eu costumava usar .. Devo lembrar incorretamente, ou fiz isso e simplesmente não me lembro.
Kyle Brandt

13

O zsh não é totalmente compatível com o bash. Há uma variedade de diferenças. O zsh mais recente é mais compatível com o bash (= ~ suportado, o exec agora tem as opções extras de sinalização, etc.), mas a compatibilidade total não é uma meta, nem mesmo em "emular".

Por exemplo, o bash substring é $ {foo: offset: len}, mas no zsh é $ foo [start, end] e esse é apenas um exemplo simples.

zsh é um shell influenciado pelo tcsh e pelo ksh, que faz muitas coisas à sua maneira; A compatibilidade do POSIX não é explicitamente uma meta, mas os desenvolvedores respondem aos patches que adicionam opções / emulam o comportamento que aproxima as coisas do POSIX. Mas quando você começa a realmente explorar o poder do shell, começa a criar scripts somente para gravação, mais ainda do que o bash.

O bash é POSIX sh + ksh + pedanticismo, com alguns recursos agora copiados do zsh. Ele também possui scripts somente de gravação, mas como possui operadores menos poderosos, você acaba não usando a concisão do zsh e as coisas podem ser mais legíveis (exceto por todas as citações para evitar a divisão do espaço em branco, o estúpido array $ do estilo ksh significa primeiro elemento da matriz, não todos os elementos da matriz, etc etc).

Escrever scripts que tiram o máximo proveito do poder de qualquer shell é imprudente, a menos que você esteja em um ambiente restrito (por exemplo, escrevendo scripts rc do sistema, onde alguns FSs podem não estar montados, etc.). Como ideal, use Perl / Python / Ruby / qualquer coisa grande o suficiente para que você não precise da expressividade do Bourne sh, se quiser que outros consigam mantê-la. Mantenha o material do shell para itens relacionados ao shell interativo (programação de conclusão de guias, etc).

Eu não usaria bash sobre zsh. Eu usaria o sh over zsh simples para scripts simples ou alternaria para uma linguagem em que matrizes associativas tenham operadores decentes (ao contrário do zsh, onde eles são novamente 'concisos'). Eu posso mudar um script sh para bash se precisar desse pequeno recurso para estender um script de trabalho comprovado existente e não tiver tempo para reescrevê-lo agora.


6
nb: $ {foo: offset: len} agora é suportado no zsh, para compatibilidade.
Phil P

6

Meu conselho: se você estiver buscando portabilidade absoluta, escreva usando as regras do shell Bourne, nem se preocupe com as extensões do shell Korn. Como mencionado, existem algumas "caixas grandes" mais antigas que não possuem shell GNU nelas.

O Bash já faz "demais". Tenho um amigo no trabalho que prefere o zsh, mas não sei exatamente o que ele faz.

De qualquer forma, escreva para o shell Bourne (ou "bourne again") ou, alternativamente, se você estiver criando um script personalizado para um pequeno número de caixas específicas, pule "shell hell" completamente e escreva usando perl ou python (ou qualquer outra coisa) seu intérprete instalado localmente favorito é).


5

Além do motivo de portabilidade indicado acima, outro pode ser que o bash ainda está adicionando recursos.

Por exemplo, o bash v4.x + introduzido:

  • globbing recursivo:

    rm -f ** / *. log

  • autocd:

    Digite "/ tmp" em vez de "cd / tmp"


2
Como os recursos de cópia do bash do zsh são um motivo para usar o bash?
Qqx 27/10/12

5

A propósito, você já foi informado aqui muitas vezes que o bash é encontrado em praticamente todos os lugares; portanto, use-o para escrever scripts portáteis, o que é falso.

Absurdo. Se você sabe que todo sistema com o qual você se preocupa tem BASH, é uma afirmação perfeitamente razoável. O BASH possui muitos recursos úteis que não podem ser razoavelmente emulados no POSIX sh. O uso frívolo de recursos não POSIX não é uma boa idéia, mas usá-los quando você realmente precisa deles é bom.

Portabilidade não é absoluta. É discutível até onde você precisa levá-lo, como qualquer outra coisa. Por exemplo, o Fedora usa comandos shell para criar pacotes RPM e as diretrizes de empacotamento do Fedora afirmam que, como todos os pacotes devem ser construídos nativamente no Fedora, é bom usar todos os recursos do BASH. Embora teoricamente outras distros sem o BASH possam querer reutilizar os RPMs de origem, eles tomaram uma decisão sobre portabilidade com base na praticidade, em vez de no seu mantra "SEMPRE UZE POSIX !! 1".

O ZSH não pegou como um shell padrão, simplesmente porque é uma bagunça enorme de idéias meio cozidas.


2
Você pode explicar quais recursos ou idéias do zsh você acha que estão meio cozidos e por quê?
funroll

2

A propósito, você já foi informado aqui muitas vezes, que bashé encontrado praticamente em toda parte; portanto, use-o para escrever scripts portáteis, o que é falso .

A maneira correta de escrever scripts unix portáteis é usar sh, o que é encontrado em todos os sistemas * nix .

Todos os outros shell, exceto, shsão apenas uma ferramenta interativa diária sua.

Quando se trata de bashvs zsh- bashestá incluído mais do *nixesque zsh, então aqui vêm as desvantagens de instalar software adicional no sistema - você precisa mantê-lo. Algumas pessoas adoram os "recursos legais" do zsh e gostam de pagar esse preço, outras não.


2
Muitas implementações modernas de sh são apenas links para o bash.
user9517 suporta GoFundMonica

2
@Iain O Ubuntu usa o dash por padrão e, mesmo que shseja do bash, habilita o modo de compatibilidade quando executado como sh.
mgorven

2

Outro ponto:

Muitos programas fornecem conclusão legal do bash por padrão. Para mim, é o motivo de não mudar.

[adicionado em julho de 2013] Bem, depois de alguns anos de uso do zsh desde o comentário acima, devo dizer que o preenchimento de tabulação (mesmo um incorporado, sem modificações de terceira paridade) é brilhante e parece muito além do oferecido pelo bash . :).


3
Eu acho que funciona com ZSH, bem como, com a conclusão de tabulação em ZSH, recebo um monte de argumentos programa específico ...
Kyle Brandt

Interessante. Você está dizendo que os arquivos de conclusão do bash funcionam com o zsh, ou apenas alguns programas têm o material de conclusão específico do zsh? Ainda há algum layout padrão dos arquivos de conclusão do bash que o zsh pode ou não considerar automaticamente. Você ajustou sua configuração do zsh para fazê-la funcionar?
Wojciech Kaczmarek

@Wojciech Kaczmarek: Eu acho que você quer o 19.3 do seguinte: zsh.sourceforge.net/Doc/Release/zsh_19.html . Honestamente, eu nunca teve tempo para realmente entender isso, apenas arrancou um .zshrc I encontrados on-line :-) Mas vai completar argumentos de linha de comando a partir de programas como o apt, grep, etc ....
Kyle Brandt

5
O preenchimento de guias do bash é muito semelhante ao antigo sistema de preenchimento de guias do zsh. Essa é uma das idéias copiadas do zsh para o bash (existem outras copiadas do bash para o zsh). Você pode usar scripts de conclusão escritos para o bash no zsh, executando "bashcompinit" e, em seguida, usando os comandos "complete" e / ou "compgen" dentro do zsh - isso é possível porque a funcionalidade do bash é um subconjunto do disponível no zsh e assim pode ser emulado. Portanto, não há razão para mudar para o bash porque um comando é enviado com uma conclusão do bash.
Phil P
Ao utilizar nosso site, você reconhece que leu e compreendeu nossa Política de Cookies e nossa Política de Privacidade.
Licensed under cc by-sa 3.0 with attribution required.