Como usuário do Linux, sempre usei o bash porque era o padrão em todas as distribuições que eu usava. Pessoas que usam outros sistemas Unix, como o BSD, parecem usar outros shells com muito mais frequência. No interesse de aprender um pouco mais, decidi experimentar o zsh.
Como usuário bash:
- Quais recursos vou sentir falta?
- E quais devo procurar?
Respostas:
Já houve bastante atividade sobre o tópico em outros sites do Stack Exchange. Minha experiência de mudar do bash para o zsh, tanto quanto me lembro (foi anos atrás²), é que não perdi nada. Eu ganhei muito; aqui estão o que eu acho que são os recursos simples específicos do zsh que eu mais uso:
O recurso zsh que mais sinto falta quando uso ocasionalmente o bash é o autocd: no zsh, executar um diretório significa mudar para ele, desde que você ative a
autocd
opção.⁴Outra característica muito útil é o globbing chique. Os caracteres dos
hieróglifossão um pouco difíceis de lembrar, mas extremamente convenientes (por exemplo, geralmente é mais rápido procurá-los do que escrever ofind
comando equivalente ). Alguns dos exemplos mais simples:foo*~*.bak
= todas as correspondências,foo*
exceto aquelas correspondentes*.bak
foo*(.)
= somente arquivos regulares correspondentesfoo*
foo*(/)
= apenas diretórios correspondentesfoo*
foo*(-@)
= apenas links simbólicos pendentes correspondentesfoo*
foo*(om[1,10])
= os 10 arquivos mais recentes correspondentesfoo*
foo*(Lm+1)
= apenas arquivos de tamanho> 1MB = no diretório e todos os seus subdiretórios, recursivamente⁴dir/**/foo*
foo*
dir
Para renomear fantasia, o
zmv
built-in pode ser útil. Por exemplo, para copiar todos os itensfile
parafile.bak
:zmv -C '(*)(#q.)' '$1.bak'
O bash e o zsh têm um sistema de conclusão decente que precisa ser ativado explicitamente (
. /etc/bash_completion
ouautoload -U compinit; compinit
). O Zsh's é muito mais configurável e geralmente mais sofisticado.Se você executar o zsh sem a
.zshrc
, ele iniciará um menu interativo que permite escolher opções de configuração. (Algumas distribuições podem desativar isso; nesse caso, executeautoload zsh-newuser-install; zsh-newuser-install
.) Eu recomendo ativar as opções de histórico recomendadas, ativar a conclusão (“novo estilo”) e ativar as “opções comuns de shell”, excetobeep
. Mais tarde, configure mais opções à medida que você as descobre.² Na conclusão programável época era característica do assassino do zsh, mas o bash adquiriu logo depois.
⁴ Os recursos que o bash adquiriu apenas na versão 4 (ainda não estão disponíveis em muitos sistemas) são do tipo menor.
fonte
autocd
recurso que você discute acima. Habilite o recurso usando o comandoshopt -s autocd
. Em seguida, o recurso funciona como você descreveu.where
comando interno, para não ser confundido com owhich
comando.-exec
um shell para coisas como seleção come
e um pipeline para ferramentas comosort
esed
para reescrevere
e classificar). Muito mais verbalmente, é claro.Além disso, a conclusão da guia padrão é melhor que o bash ... por exemplo ...
~/.e.d
O TAB será expandido para~/.emacs.d/
no zsh, o bash emitirá apenas um bipe.fonte
setopt
opção não padrão você usa para isso (se houver)?_-.
defini como curinga.zstyle ':completion:*' matcher-list 'm:{a-zA-Z}={A-Za-z}' 'r:|[._-]=* r:|=*' 'l:|=* r:|=*'
. Veja stackoverflow.com/q/7906078/311660zsh
permite editar um comando de várias linhas (consulte o editor de linha zsh ), o bash não. Se você tentar o mesmo truque (Ctrl-p
), o bash buscará o último comando.fonte
O Bash possui o recurso de poder abrir portas usando
ou
No entanto, ele está desabilitado no Debian, pois é visto como um obstáculo (se o caminho realmente existir) e está fora do escopo do que um shell deve fazer. Mais informações [lista de discussão debian]
fonte
Que - aprimorado no zsh
O
which
comando bash apenas revela a localização de um comando.No Zsh
which
irá revelar a definição de analias
, a fonte de afunction
e a localização de um comando.Digamos que tivemos um apelido de shell:
No Bash, se perguntássemos:
which gg
o resultado seria nuloEm Zsh:
which gg
nos dará ...Digamos que tivemos uma função shell:
No Bash, se perguntássemos:
which hello
o resultado seria nulo.Em Zsh:
which hello
nos dará ...fonte
type
comando (embutido). E apenas para nitpick:which
é um comando externo, não um bash embutido.zsh - um shell completo
existem muitos, lendo
zshcontrib(1)
um deles é possível detectar duas versões de jogosautoload
ativáveistetris
(o outro comncurses
)zsh
em competição comemacs
, por completude (como descrito).=
Gostaria de mencionar a
=
palavra - chave, que pode causar irritaçãocurl
(os URLs geralmente contêm?var=val
neles; mas éunsetopt
possível, eu acho):q file =less
(gentoo
) resolveq file $(which less)
=
expande para o caminho completo do comando em questão.outras guloseimas
outras coisas, fora da mente, são o prompt certo
RPS1=%d
(para exibir$PWD
em estilo), Alt + H(run-help
ie.man
), Alt + ? (which-command
)vared
ezed
(autoload
função), semelhante Alt + Xao minibuffer do Emacs para executar widgets sem vinculá-los, aliases globais e de sufixo, duração da conclusão do comando de rastreamento de histórico estendido-m
e-regex
correspondentes, emulação de shell (por exemplocsh
,ksh
comemulate
) eautoload
run-help
com trechos de arquivo para os built-ins.lamentações
Acho que a maioria dos recursos, se não todos, foram implementados há muito tempo e, lendo os registros de alterações, não há grandes mudanças e adições de novos recursos, o que é muito triste (nada mais a explorar e descobrir).
bash
parece estar mais distribuído noreadline
(ao contrário dezle
) egnu history
no espírito linux; por exemplo, funções readline e combinações de teclas podem ser aplicadas globalmente (como mantidas~/.inputrc
e/etc/inputrc
) se não forem substituídas por específicas do bashbind
.conclusão
Pessoalmente, acho que
emacs
(especialmente da perspectiva de (o atual?)emacs-nox
Sabor) ser a inspiração para um software excepcional,zsh
etmux
fiz um bom trabalho como exemplo nessa implementação; para as pessoas que apreciam seu valor (ao nível de não precisar / depender doX
servidor). O shell Unix é poderoso o suficiente e sua continuidade e consistência são suficientes para um fluxo de trabalho e produtividade adequados (na computação geral).fonte