Nunca é tarde! Convertido do Bash para ZSH!

Após um bom tempo utilizando o zsh, apresentei recentemente a um amigo que se surpreendeu, após conversarmos um pouco surgiu a idéia de aprender um pouco mais, e compartilhar…. Fui influenciado há certo tempo pela onda oh-my-zsh, mas acabei por não contribuir em nada. Quem sabe agora?!?!

Começando do inicio, acredito que a maior parte de nós em algum momento já se deparou com um shell de linha de comandos.O shell como é mais utilizado é uma interface textual para as funcionalidades do sistema operacional, no MacOS você o acessa por meio do Terminal ou iTerm2. Existem muitos shells a serem escolhidas, e a maioria dos sistemas operacionais/distribuições acabam “facilitando” esta escolha definindo alguma padrão. Durante muito tempo só conhecia o mais popular deles GNU Bourne Again Shell ou bash, uma excelente escolha quando você precisa repetir os mesmos comandos que já estão no histórico, para iniciar algum container ou ver logs… mas uma péssima, quando você passa certo tempo usando Git e RVM (

1
git branch

 para lembrar o branch que estou e 

1
rvm gemdir

 para ver a versão do ruby e gems) ou aprendendo comandos novos e utilizando novas técnicas do universo devops (fiz recentemente o curso da egenial de imersão sys deploy).

zsh?

O Z-shell ou zsh é um dos shells mais completos em termos de funcionalidades e usabilidade dentre os disponíveis no Darwin que traz como default o tsch desde a v.7.0 presente no Mac Os X Panther. A equipe do zsh já faz um excelente trabalho explicando e e advogando ao seu respeito, mas como todos tenho meus pontos preferidos.

  1. Corretor ortográfico: Quem nunca escreveu _rmv, fnd, mkdr _ou qualquer outro comando incorretamente? O zsh possui um corretor que varre e apresenta entre comandos e sub-comandos o mais próximo ao incorreto informado. Estava errado me corrija?

    zsh: correct ‘rmv’ to ‘rvm’ [nyae]?

  2. Tab completion: A maior parte dos shells como o bash possuem tab completion, mas não tão simples ou amigável quanto o zsh. Tanto no sentido de configuração quanto de usabilidade, o zsh dá um banho. Ele apresenta em um menu navegável de sub-comandos e opções de preenchimento como a lista de diretórios quando executamos um ls, ou a lista de processos quando executamos um kill.

  3. Compartilhamento de histórico: Manter histórico entre as sessões ao invés de sobrepor-las, não tem nada pior do que perder o histórico de comandos executados pois uma sessão havia sido sobreposta, o zsh mantem o histórico das várias sessões.

  4. Globbing. O zsh se preocupou muito com seus wildcards, e o resultados foram incríveis _ls git*~*flow* _ou ls (GOL|TAM)*POA*, sempre dou uma olhada  na introdução do zsh.

  5. Criar funções com aliases. O zsh permite a criação de funções chamadas pelos seus aliases, de forma fácil e ágil.

      <td>
        <div class="bash codecolorer">
          <span class="kw1">function</span> juntarpdfs <span class="br0">&#123;</span> <span class="kw2">gs</span> <span class="re5">-q</span> <span class="re5">-dNOPAUSE</span> <span class="re5">-dBATCH</span> <span class="re5">-sDEVICE</span>=pdfwrite <span class="re5">-sOutputFile</span>=merged.pdf <span class="st0">"$@"</span> <span class="br0">&#125;</span>
        </div>
      </td>
    </tr>
    

    1

  6. É bem parecido com o bash. Passei um bom tempo utilizando o zsh exatamente como fazia no trabalho com o bash, e mesmo assim foi impossível não aprender algo novo e que aumentasse minha produtividade, ele é simples e amigável.

Mágica com o zsh!

Como já havia falado antes, o zsh está presente no darwin, ou seja, se você tem instalado em sua maquina uma nova versão ou antiga do MacOsx como eu tinha, não vai precisar realizar várias buscas no google por zsh, e olhar vários how-tos. Nem mesmo para personalizar em cores, aliases, funções e auto-completes se você usar o oh-my-zsh. Como descreve no link ao lado no README do projeto, o zsh é mágico para quem não tem muito tempo a perder:

“A community-driven framework for managing your zsh configuration. Includes optional plugins for various tools (rails, git, OSX, brew,…), nearly 80 terminal themes, and an auto-updating tool so that you can keep up with the latest improvements from the community.”

Para colocar tudo isso para funcionar,  você pode fazer o seguinte:

  • Use o instalador automático criado pelo Robby Russell:

      <td>
        <div class="bash codecolorer">
          <span class="kw2">wget</span> <span class="re5">--no-check-certificate</span> https:<span class="sy0">//</span>github.com<span class="sy0">/</span>robbyrussell<span class="sy0">/</span>oh-my-zsh<span class="sy0">/</span>raw<span class="sy0">/</span>master<span class="sy0">/</span>tools<span class="sy0">/</span>install.sh <span class="re5">-O</span> - <span class="sy0">|</span> <span class="kw2">sh</span>
        </div>
      </td>
    </tr>
    

    1

Caso você não tenha o wget instalado é bem provável que você verá um erro no console. Esta é  uma ótima oportunidade de fazer isso usando o brew.

  • Para instalar o brew:

      <td>
        <div class="bash codecolorer">
          curl <span class="re5">-L</span> http:<span class="sy0">//</span>github.com<span class="sy0">/</span>mxcl<span class="sy0">/</span>homebrew<span class="sy0">/</span>tarball<span class="sy0">/</span>master <span class="sy0">|</span> <span class="kw2">tar</span> xz <span class="re5">--str</span>
        </div>
      </td>
    </tr>
    

    1

  • Para instalar o wget:

      <td>
        <div class="bash codecolorer">
          brew <span class="kw2">install</span> <span class="kw2">wget</span>
        </div>
      </td>
    </tr>
    

    1

Quando terminar tudo você verá uma tela como a seguinte, daí é só abrir uma nova sessão para ver o thema do Robby Russel fazendo a sua mágica.