Pular para o conteúdo

zsh (Z shell) - Uma alternativa ao bash

Este artigo descreve alguns procedimentos para configuração do zsh (Z Shell), uma alternativa ao mais conhecido bash (Bourne-Again Shell).
Alberto Federman Neto. albfneto
Hits: 49.441 Categoria: Linux Subcategoria: Configuração
  • Indicar
  • Impressora
  • Denunciar

Parte 3: Testando zsh

Você vai tomar seu primeiro contacto com zsh.

1. Primeiro, se já o tiver, copie o arquivo de configuração original de seu zsh, para protegê-lo:

cd /
$ cd ~/
$ ls .zshrc
$ sudo cp .zshrc zshrc.original


2. Agora, o edite com seu editor de texto favorito. Apague todas as linhas e troque-as por um arquivo zsh genérico, tipo o do nosso colega do VOL, Mordecai:
# Opcoes do historico
export HISTFILE=~/.zsh_history
export HISTSIZE=50000
export SAVEHIST=50000

autoload -U compinit compinit
autoload -U zmv
setopt autopushd pushdminus pushdsilent pushdtohome
setopt cdablevars
setopt ignoreeof
setopt interactivecomments
setopt nobanghist
setopt noclobber
setopt nobeep
setopt HIST_REDUCE_BLANKS
setopt HIST_IGNORE_SPACE
setopt SH_WORD_SPLIT
setopt nohup

setopt AUTO_CD
setopt AUTO_LIST
setopt EXTENDED_HISTORY
setopt HIST_IGNORE_DUPS
# desabilita checagem de email
# unset MAILCHECK

#########################################
### Coisas interessantesr
#
### allow approximate

zstyle ':completion:*' completer _complete _match _approximate
zstyle ':completion:*:match:*' original only
zstyle ':completion:*:approximate:*' max-errors 1 numeric

### tab completion for PID :D
zstyle ':completion:*:*:kill:*' menu yes select
zstyle ':completion:*:kill:*' force-list always

### cd not select parent dir.
zstyle ':completion:*:cd:*' ignore-parents parent pwd

## # black magic
zmodload -i zsh/complist
zstyle ':completion:*:default' list-colors ''

## PS1 and PS2
export PS1="$(print '%{\e[0m%}')[$(print '%{\e[1;34m%}%n@%m%{\e[0m%}'):$(print '%{\e[0;34m%}%~%{\e[0m%}')] "
export PS2="$(print '%{\e[0;34m%}>%{\e[0m%}')"

## aliases
alias dir='ls -1'
alias ls='ls --color=auto -F'# colorido
alias lsd='ls -ld *(-/DN)'# somente diretorios
alias lsa='ls -ld .*'     # somente arquivos
alias lsr='ls *(om[1])'   # listar o mais novo
alias lso='ls -l *(Om[1])'# listar o mais velho
alias mem="free -m"     # memoria livre
alias -s png=display      # abrir arquivos pela extensao
alias -s jpg=display
alias -s gif=display
alias -s mpg=mplayer
alias -s sxw=soffice
alias -s doc=soffice
alias -s txt=vim
alias -s log=multitail
## inline aliases
alias -g G='| grep'
alias -g L='| less'

## digite um diretorio e entre direto nele.
compctl -/ cd

## carregar o prompt
#. ~/.zshprompt

Se preferir, use outros, como o completo de SMarcell, etc.
2. Abra um terminal. Ainda será seu bash normal.

Num teste apenas, troque pelo zsh, com o comando zsh:

zsh

Trocou, veja que tem até relógio, nessa configuração (Figura 1):

3. Agora o teste, um comando qualquer.

Na página 2, para instalar o zsh (no Sabayon), você instalou Overlays. Vamos ver os Overlays que tem? Para ver no terminal, digite layman -l, e isto aparece:

layman -l

 * mv                [Git     ] (git://git.o.g.o/user/mv.git         )
 * plab              [Git     ] (git://git.o.g.o/user/plab.git       )
 * rich0             [Git     ] (git://github.com/rich0/rich0-over...)
 * sabayon           [Git     ] (git://github.com/Sabayon/for-gent...)
 * sabayon-distro    [Git     ] (git://github.com/Sabayon/sabayon-...)
 * stuff             [Git     ] (https://github.com/megabaks/stuff...)
 * sunrise           [Git     ] (git://git.o.g.o/proj/sunrise-revi...)
 * zugaina           [Rsync   ] (rsync://gentoo.zugaina.org/zugain...)


No zsh, assim que digito o comando layman, aparecem todos os possíveis comandos relacionados a layman. Se eu uso layman -l, aparece dizendo o que o comando faz, isto é lista os Overlays.

Executando o comando, os Overlays instalados aparecem, normal, mas até aí tem vantagem, pois a execução é mais rápida que o bash.

Quando vou digitar, exemplo, layman --help para ver o help, digito apenas layman - e pronto, as opções dele (como -a, --add e -d, --delete) aparecem.

Veja essas várias características do zsh, na Figura 2:

Agora num outro comando, vamos matar um processo:
Exemplo o GNOME Do. Usaremos o comando pkill -9 gnome-do. No zsh, quando eu digito apenas pk, ele já coloca o pkill, e quando eu digito gnome-, ele já coloca completo o gnome-do.

Assim, o uso dele é prático, pois tem autocompletar, auto-correção, etc.

Além disso é muito personalizável e tem muitos recursos, veja por exemplo:
4. Agora você já testou, edite o seu arquivo "/home/usuario/.zshrc", personalizando-o a seu gosto. Pode trocar cores, opções de autocorreção, etc; muita coisa.

Se quiser, baseie-se no meu arquivo "~/.zshrc":

# Arquivo de Configuração para ZSH.
#
# Gravar em ~/.zshrc
#
# Modificado Por Albfneto , VOL, 2013. Versão 12.
#
# Baseado nos arquivos de MordeCai e Smithux VOL:
# http://www.vivaolinux.com.br/etc/.zshrc-mordecai/
# http://www.vivaolinux.com.br/etc/zshrc
# e em vários outros Arquivos para ZSH
#
# Cores diferentes para diretórios, arquivos etc...:

# Côres Gerais:

export LS_OPTIONS='--color=auto'
eval `dircolors -b`
alias ls='ls $LS_OPTIONS'
alias ll='ls $LS_OPTIONS -l'
alias l='ls $LS_OPTIONS -lA'

# Man pages coloridas:
if [ -e $(`which most > /dev/null`) ]; then
    export PAGER='most -s'
    export LESSHISTFILE='-'
else
    export PAGER=less
fi

# Lista colorida de complementações:
zstyle ':completion:*:default' list-colors ${(s.:.)ZLS_COLORS}


# Opcoes do historico
export HISTFILE=~/.zsh_history
export HISTSIZE=10000
export SAVEHIST=10000

autoload -U zmv
setopt autopushd pushdminus pushdsilent pushdtohome
setopt cdablevars
setopt ignoreeof
setopt interactivecomments
setopt nobanghist
setopt noclobber
setopt nobeep
setopt HIST_REDUCE_BLANKS
setopt HIST_IGNORE_SPACE
setopt SH_WORD_SPLIT
setopt nohup
setopt AUTO_CD
setopt AUTO_LIST
setopt EXTENDED_HISTORY
setopt HIST_IGNORE_DUPS

# Auto-completando com
setopt auto_list
setopt auto_menu
setopt case_glob
setopt list_types
setopt glob_complete
setopt menu_complete
setopt complete_in_word
setopt complete_aliases
autoload -U compinit promptinit
compinit
promptinit

### Configs de Autocompletar e Autocorreção:
#

zstyle :compinstall filename '/home/albfneto/.zshrc'
### allow approximate
zstyle ':completion:*' completer _complete _match _approximate
zstyle ':completion:*:match:*' original only
zstyle ':completion:*:approximate:*' max-errors 1 numeric

# Auto descrição das complementações possíveis:
zstyle ':completion:*:options' description 'yes'
zstyle ':completion:*:options' auto-description '%d'

setopt correct
setopt correctall
## digite um diretorio e entre direto nele.
compctl -/ cd

### tab completion for PID :D
zstyle ':completion:*:*:kill:*' menu yes select
zstyle ':completion:*:kill:*' force-list always


### cd not select parent dir.
zstyle ':completion:*:cd:*' ignore-parents parent pwd

## # black magic
zmodload -i zsh/complist
zstyle ':completion:*:default' list-colors ''

# Auto-completar para o comando 'kill':
zstyle ':completion:*:processes' command 'ps x -o pid,command'
zstyle ':completion:*:kill:*' menu yes select
zstyle ':completion:*:kill:*' force-list always
zstyle ':completion:*:*:kill:*:processes' list-colors '=(#b) #([0-9]#)*=0=01;31'

# Ativando modo 'verbose':
zstyle ':completion:*' verbose 'yes'
zstyle ':completion:*' show-completer

# Prompt, cores etc....
## PS1 and PS2

export PS1="$(print '%{\e[0m%}')[$(print '%{\e[1;31m%}%n@%m%{\e[0m%}'):$(print '%{\e[0;34m%}%~%{\e[0m%}')]$% "
export PS2="$(print '%{\e[0;32m%}>%{\e[0m%}')"

# Outro Prompt, Ajustar prompt alternativo
# [/dir] user@host $      HH:MM:SS
# export PS1="[%B%n%b@%m %3~]\$ "
# export PS1="[Comp:%M Usuario:%n] Dir:%d $% "

export RPS1="%D,%T"

# Adaptado a partir de meu Bash:

#Welcome msg

echo '   _ '
echo '  *v* *** BEM VINDO AO '`hostname`' ***'
echo ' /(_)\ '
echo '  ^ ^ ' `date`
echo ' '

#Sistema
echo '    '
echo '  *** Sistema: '`uname -a`' ***'
echo '   '
echo '  *** Usuario: '`who -m`' ***'
echo '   _ '

# Checa a Hora do Brasil, lista servidores NTP e ajusta Teclado:

echo '   _ '
echo '  *** Hora do Brasil e Servidores: ***'
echo '   _ '
ntpq -p
echo '   _ '
setxkbmap -model abnt2 -layout br -variant abnt2
echo '   _ '
echo '*** PRONTO, OK, EIS SEU TERMINAL, DIGITE SEU COMANDO: ***'
date

# Teste de Shell, default no Sabayon:

# Test for an interactive shell.  There is no need to set anything
# past this point for scp and rcp, and it's important to refrain from
# outputting anything in those cases.

if [[ $- != *i* ]] ; then
    # Shell is non-interactive.  Be done now!
    return
fi

# Atalhos, Alias, Para Sabayon, mude para sua Distro

alias lsa='ls -a'
alias lsc='ls -agotpUXh'
alias lst='ls -a -X'
alias terminal='mrxvt'
alias arquivos='nautilus'
alias xinit='xinit &'
alias desliga='sudo init 0'
alias reinicia='sudo reboot'
alias repositorios='sudo equo up'
alias autorepos='sudo equo up && sudo emerge --sync && sudo layman -S'
alias vaiatualizar='sudo equo u --pretend'
alias atualizar='sudo equo u'
alias editar='gksu gedit'
alias internet='/home/albfneto/Desktop/PACOTES/firefox/firefox/firefox %U'

Ele gera este prompt de terminal, com hora, data, mostrando sincronização NTP e cores diferentes etc.:

Quando não quiser mais usar o bash, e quiser trocar definitivamente para o shell zsh, execute este comando:

sudo chsh -s /bin/zsh

Detalhes:
Você também pode trocar no próprio ambiente gráfico (KDE, GNOME, etc) ou no Konsole, GNOME Terminal, etc. E também, pode trocar não só o interpretador de comandos (bash zsh) como o próprio tipo de terminal (Xterm, Iterm, Rxvt, etc).

5. Você pode querer usar oh-my-zsh (página 4), para isso, precisa salvar seu arquivo ".zshrc", porque ele será trocado:

cd /
$ cd ~/
$ sudo cp .zshrc .zshrc.classico


   1. Introdução
   2. Instalação de zsh e seus complementos
   3. Testando zsh
   4. oh-my-zsh
   5. Detalhes e conclusão

Use o GAG e nunca mais perca o boot

openSUSE - As várias formas de atualizá-lo e de instalar pacotes

Symbaloo para uso em Química e Pesquisa Científica

Atualizando Compiz Fusion em Sabayon Linux

Recuperando e/ou adaptando o GRUB do Sabayon Linux

Como ativar o módulo de cancelamento de ruído no Pipewire

Linux imprimindo em Windows via rede

Colocando seu Fluxbox totalmente transparente

Erro no alsamixer após atualização no Ubuntu 7.04

Configuração de Servidor Web no FreeBSD 9

#1 Comentário enviado por px em 09/09/2013 - 10:54h
Bacana, já havia ouvido falar e até usei um tempo atrás no BSD (sh) e no slack o zsh e um outro que não me recordo agora, mas qual é a real diferença entre eles? tem algum ganho nos comandos e binários que executamos ou é só por gosto mesmo?
#2 Comentário enviado por lcavalheiro em 09/09/2013 - 12:41h
Em primeiro lugar, excelente artigo, Alberto!


[1] Comentário enviado por px em 09/09/2013 - 10:54h:

Bacana, já havia ouvido falar e até usei um tempo atrás no BSD (sh) e no slack o zsh e um outro que não me recordo agora, mas qual é a real diferença entre eles? tem algum ganho nos comandos e binários que executamos ou é só por gosto mesmo?
Tem diferenças sim. Cada shell permite uma certa gamas de recursos e possibilidades, como por exemplo o csh (que permite usar a sintaxe da linguagem C direto no terminal), o ash (eu acho que é esse, que é um bash mais pelado, com o objetivo de ser bem leve), o ksh (meu favorito, que dá pra fazer umas coisas do arco da velha neles). Hoje eu uso só o bash, mas é mais por preguiça do que por qualquer outra coisa.
#3 Comentário enviado por azk em 09/09/2013 - 15:22h
Belo artigo!
Irei fazer alguns testes com o zsh...

Favoritado!
#4 Comentário enviado por albfneto em 09/09/2013 - 21:22h
Tem diferenças sim, alguns comandos são diferentes (não os básicos de linux)
zsh demora um pouquinho mais para carregar a shell (pelo menos no Olhômetro) mas e execução do comando em sí é mais rápida.
eu acho ela prática, por causa das autocorreções e do auto-completar.

Binários. claro não há diferença, em qualquer interpretador de comandos, com os binários executáveis, ele só os executa.
#5 Comentário enviado por albfneto em 09/09/2013 - 22:19h
COMPLEMENTOS DO ARTIGO:

13 de Novembro de 2018.

Encontrei outra maneira fácil de mudar Temas do Zsh:

Abra o Zsh, execute o comando de função

$ prompt -l

Aparecem os Prompts disponíveis:

Currently available prompt themes:
adam1 adam2 bart bigfade clint elite2 elite fade fire gentoo off oliver pws redhat suse walters zefram

Escolha um, por exemplo o "fire" e faça setar esse prompt, com este comando:

$ prompt -s fire

a seguir, edite o arquivo ~/.zshrc e coloque nele estas linhas:

autoload -Uz promptinit
promptinit
prompt fire

Se usar outro Prompt, substitua "fire" pelo nome do Prompt.

Para ver como são os Temas de Prompt, gráficamente, eles estão aqui:

http://bneijt.nl/blog/post/zsh-themes-for-prompts-screenshots/

Sobre O Dash.

O shell Dash (Debian Almquist Shell) foi usado muito por Ubuntu, por anos, mas descobri recentemente que ele foi inventado para Debian, e nao para Ubuntu:

https://www.cyberciti.biz/faq/debian-ubuntu-linux-binbash-vs-bindash-vs-binshshell/
https://www.edivaldobrito.com.br/dash-to-dock-no-gnome-shell/

Mais um Artigo meu, sobre o assunto exposto aqui:

https://edpsblog.wordpress.com/2017/07/04/dica-variando-terminais-e-shell/
#6 Comentário enviado por xerxeslins em 10/09/2013 - 10:09h
Favoritado, É lógico.
#7 Comentário enviado por removido em 10/09/2013 - 21:31h
Ótimo artigo.Vou testar também.
#8 Comentário enviado por px em 10/09/2013 - 23:07h
Veleu pelas respostas ai colegas dos comentários supracitados.
#9 Comentário enviado por smarcell em 12/09/2013 - 11:47h
Vamos jogar Tetris no zsh?

autoload -U tetris
zle -N tetris
bindkey 'TECLA' tetris

Onde 'TECLA' é a tecla definida por você, e que irá chamar o jogo!

Feito isso, pressione a tecla que você definiu e pronto! Jogue a vontade. :)

zsh rules!!!
#10 Comentário enviado por Crux em 18/09/2013 - 13:44h
Cara é que distro posso encontrar
#11 Comentário enviado por albfneto em 06/02/2014 - 13:00h
Antigo, mas só agora ví.
Fish e Zsh estão presentes em quase todas as Distros.
procure pelo pacote Fish ou zsh,no seu gerenciador de pacotes.
em muitos linux, é mais fácil de instalar que no sabayon ou no gentoo.

Contribuir com comentário

Entre na sua conta para comentar.