Vale a pena mudar para zsh para uso casual? [fechadas]

192

O shell padrão no Mac OS X é o bashque geralmente gosto de usar. Eu apenas tomo como garantido. Seria muito bom se ele completasse automaticamente mais coisas , e eu ouvi coisas boas a zshesse respeito. Mas, na verdade, não tenho a tendência de passar horas mexendo nas configurações para melhorar um pouco o uso da linha de comando, já que minha vida na linha de comando não é tão ruim.

(Pelo que entendi, bashtambém pode ser configurado para concluir automaticamente de forma mais inteligente. É a configuração em que não estou muito interessada.)

Mudar para zsh, mesmo em um pequeno número de casos, facilitará minha vida? Ou é apenas uma concha melhor se você dedicar tempo para saber por que é melhor? (Exemplos também seriam bons :))


@ Rodney Amato e @ Vulcan Eager dão duas boas razões para se manter bashe mudar para respectivamente zsh. Parece que vou ter que investigar os dois! Ah bem:)

Existe alguém com uma opinião de ambos os lados da discussão?

Will Robertson
fonte
14
Como o zsh é (quase) um superconjunto do bash, você pode começar movendo para o zsh e usá-lo como o bash. Então você pode aprender as gemas zsh um pouco de cada vez.
orip 21/12/08
Se você tem um pouco de personalização do bash e costuma usar o shell dentro do emacs, isso não parece trivial. Eu postei pergunta relacionada: stackoverflow.com/questions/13326879/…
justingordon 10/11/12
A única coisa que eu não gosto no zsh é que (pelo menos no Ubuntu) você terá que configurá-lo você mesmo na primeira vez em que o iniciar (em vez de fornecer alguns padrões sãos com os quais você poderá mexer posteriormente). Se você conseguir superar isso, o zsh é o melhor!
zrajm 6/09/13

Respostas:

68

Para uso casual, você provavelmente está melhor aderindo ao bash e apenas instalando a conclusão do bash.

A instalação é bem fácil, pegue o bash-conclusão-20060301.tar.gz em http://www.caliban.org/bash/index.shtml#completion e extraia-o com

tar -xzvf bash-completion-20060301.tar.gz

copie o arquivo bash_completion / bash_completion para / etc com

sudo cp bash_completion/bash_completion /etc

que solicitará sua senha. Você provavelmente desejará criar um diretório /etc/bash_completion.d para quaisquer scripts de conclusão adicionais (por exemplo, eu tenho o script de conclusão do git).

Feito isso, a última etapa é garantir que o arquivo .bash_profile no diretório inicial tenha

if [ -f /etc/bash_completion ]; then
     . /etc/bash_completion 
fi

nele para carregar o arquivo de conclusão quando você efetuar login.

Para testá-lo, basta abrir um novo terminal e tentar concluir no cvs e ele deve mostrar as opções de cvs na lista de conclusões.

Rodney Amato
fonte
Tentei o acima, no entanto, sempre que inicio o bash, recebo 4 erros de "operador unário esperado" e 4 "argumentos demais".
precisa saber é o seguinte
12
Se você estiver usando homebrew no OSX, poderá executar brew install bash-completion.
Nathan Villaescusa
3
Bash-Completion2 é melhor! No OS X:brew tap homebrew/versions; brew install bash-completion2
Zearin 28/01
85

Pessoalmente, eu amo zsh.

Geralmente, você provavelmente não notará a diferença entre ele e o bash, até querer fazer rapidamente coisas como globbing recursivo:

  • **/*.c por exemplo.

Ou use aliases de sufixo para associar progs específicos a sufixos diferentes, para que você possa "executá-los" diretamente. O alias abaixo permite "executar" um arquivo de origem C no prompt simplesmente digitando ./my_program.c- o que funcionará exatamente como se você digitasse vim ./my_program.c. (Tipo equivalente ao clique duplo no ícone de um arquivo.)

  • alias -s c=vim

Ou imprima os nomes dos arquivos modificados hoje:

  • print *(e:age today now:)

Você provavelmente pode fazer todas essas coisas no bash, mas minha experiência com o zsh é que, se há algo que eu quero fazer, provavelmente o encontro com os amantes do zsh . Também acho o livro ' From Bash to Z-Shell ' realmente útil.

Brincar com o número incrivelmente grande de opções também é divertido!

Matt
fonte
1
Os dois primeiros exemplos aqui não significam nada para mim (um usuário casual do bash considerando a possibilidade de mudar para zsh) - você poderia elaborar o que significa "globbing recursivo" ou o que você quer dizer com "associar progs específicos a sufixos diferentes"?
Aaronsnoswell 26/08/13
5
@aaronsnoswell: "globbing recursivo" significa procurar em um subdiretório e em todos os seus subdiretórios arquivos que cujos nomes correspondam a um padrão específico. O Bash não faz isso por padrão; você findou locatepara pesquisar recursivamente. Mas, ao permitir que outro programa faça a pesquisa, você perde os limites entre nomes (a menos que seja cuidadoso), bem como o acesso às habilidades internas de globbing do shell e basicamente precisa se contentar com o que o outro programa fornece, ou tubo de sua saída através de um programa como grep, awkou sed(todos bastante complexo, por direito próprio).
Chao
6
Atualmente, você pode definir a globstaropção no bash para permitir pesquisas recursivas, como mencionado acima. Tenho certeza de que não foi o caso quando esta resposta foi escrita.
Chao
Com glob_star_shortin zsh, agora você pode fazer **.c, que é interpretado como **/*.c.
PythonNut
Eu uso zsh 5.3e entro command not found: agecomprint *(e:age today now:)
Timo
38

Mude para zsh. Você terá acesso a:

  1. zmv: Você pode fazer: zmv '(*).mp3' '$1.wma'para milhares de arquivos.
  2. zcalc: Calculadora extremamente confortável, melhor que bc.
  3. zparseopts: Uma linha para analisar opções complexas arbitrárias fornecidas ao seu script.
  4. autopushd: Você sempre pode fazer isso popddepois cdpara voltar ao diretório anterior.
  5. Suporte de ponto flutuante. É necessário de tempos em tempos.
  6. Suporte de hashes. Às vezes, eles são apenas uma característica fundamental.
Zearin
fonte
17
O exemplo para zmv deve ser zmv '(*). Mp3' '$ 1.wma'. Corrija-o, essa apresentação descuidada pode ser confusa e frustrante para os inexperientes.
qed
5
@ TravisBear autoload zcalc; zcalc(embora eu próprio digite apenas pythonsempre que precisar de uma calculadora).
Francisco
9
"autopushd: Você sempre pode fazer o popd após o cd para voltar ao diretório anterior." O equivalente a isso não é apenas cd -?
Minhaz1
4
zmve zcalcnão estão disponíveis imediatamente. Não está claro que zmvapenas renomear arquivos; Pensei que você estivesse convertendo o formato. Eu não sei o que "hashes" suporte significa. Este post parece ser "útil" apenas para pessoas que já conhecem o zsh.
MPEN
1
@ Mark Neste caso, "hash" é sinônimo de "array associativo". bash4 foi lançado apenas alguns meses antes desta resposta.
chepner
13

Se tudo o que você deseja usar o ZSH é para uma melhor conclusão, a configuração é bastante fácil. Coloque isso em seu ~ / .zshrc:

autoload -U zutil      # [1]
autoload -U compinit   # [2]
autoload -U complist   # [3]
compinit

No entanto, vale a pena conferir todos os outros ótimos recursos do ZSH. O exemplo acima fornecerá um prompt bastante claro e com boa conclusão. Se você não quiser mexer nas configurações, mas quer ver o que o ZSH pode fazer por você, pesquise no Google por "zshrc" e você estará pronto para usar as configurações para começar.

jkramer
fonte
3
Para que tipos de coisas isso adicionará conclusão? Não gosto de adicionar coisas aleatoriamente sem saber o que está fazendo.
MPEN
6

O zsh tem uma coisa de configuração da GUI do console. Você pode configurá-lo rapidamente e facilmente, sem precisar mexer nos arquivos de configuração. Eu não acho que você precisará de muito tempo para configurá-lo, provavelmente 10 segundos usando apenas os padrões, então vá em frente e experimente.

Staale
fonte
10
Como você acessa esse "console gui"?
MPEN
Geralmente, é a primeira coisa que você vê quando carrega zshsem nenhum arquivo de ponto relacionado. Para obtê-lo manualmente, tenteautoload -U +X zsh-newuser-install; zsh-newuser-install -f
Adam Katz
3

Staale está falando sobre um assistente como programa (CUI), que é executado automaticamente na primeira vez em que você executa o zsh. Basta responder a algumas perguntas, visualizar / alterar os padrões e está configurado para você.

O IBM developerWorks possui ótimos recursos no zsh.

Eu não usei recursos muito avançados e até agora não encontrei diferenças sérias que dificultariam alguém vindo do bash.

Alguns exemplos:

  • !? pattern <Tab> será preenchido automaticamente até o último comando no padrão de correspondência do histórico. Muito útil.

  • Você pode configurar um prompt no RHS. Um uso é manter um prompt de largura fixa no lado esquerdo, para que todos os comandos se alinhem bem ao exibir o pwd (ou qualquer coisa de largura variável) como o prompt do lado direito.

  • Você pode redirecionar a entrada de vários arquivos (ainda para tentar isso): cat <arquivo1 <arquivo2 <arquivo3

Agnel Kurian
fonte