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).

[ Hits: 45.838 ]

Por: Alberto Federman Neto. em 09/09/2013 | Blog: https://ciencialivre.blog/


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


Página anterior     Próxima página

Páginas do artigo
   1. Introdução
   2. Instalação de zsh e seus complementos
   3. Testando zsh
   4. oh-my-zsh
   5. Detalhes e conclusão
Outros artigos deste autor

Usando Linux - Vida nova para um velho Itautec Infoway

Resolvendo problemas de rede em Linux

Introdução aos ambientes gráficos e gerenciadores de janelas menos conhecidos

Experimento com Linux (parte 2): de Sabayon a... Gentoo e Funtoo!

Associando teclas a comandos, tarefas ou aplicativos... com toda facilidade

Leitura recomendada

Configurando suporte Firebird no LAMP (xampp) em Lubuntu

Traceroute com ICMP e TCP

Configurando o CACIC (parte 2)

Configurando mod_gzip no Apache

openSUSE 12.1 - Instalando Oracle Java

  
Comentários
[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




Patrocínio

Site hospedado pelo provedor RedeHost.
Linux banner

Destaques

Artigos

Dicas

Tópicos

Top 10 do mês

Scripts