Autoria de Alberto Federman Neto, albfneto
Atualizado em 28 de Abril de 2018.
1 . INTRODUÇÃO:
Quem acompanha meus artigos sabe que gosto de personalizar os LInux e modificar, e que uso vários pacotes e ambientes gráficos.
Este Artigo é uma expansão da Dica: Vamos brincar no terminal?
Aqui, mostro como personalizar o Shell Fish, de duas maneiras diferentes, em OpenSUSE (detalhes, Itens 5 e 9) e em Sabayon Linux (detalhes, Itens 6 e 10).
2. ALGUNS SHELL IMPORTANTES: BASH, ZSH E FISH:
O Shell ( em Português: “Concha”), é o Interpretador de Comandos dos sistemas Unix e Linux. No Linux, o clássico e mais usado é o Bash, que pode ser personalizado de várias maneiras.
O Shell roda através do Emulador de Terminal (chamado abreviado de “Terminal”) onde nós, usuários de Linux, digitamos os comandos.
Eu gosto de variar o Shell. Uso três: Bash, Zsh e Fish. Como eu falei, Bash é o clássico, Zsh é a mais completa e recomendada para os Profissionais, mas eu destaco neste Artigo o Shell Fish.
3. FISH:
Fish (sim, em Inglês, “Peixe”!) é acrônimo de “Friendly Interactive Shell” (algo como “Shell Interativo e Amigável”).
Foi desenvolvido a partir dos anos 90 (lançado oficialmente em 2005), pelo Programador Norueguês Axel Liljencrantz, depois aperfeiçoado por vários outros Programadores, mas atualmente é mantido por muitos programadores.
Ele tem a fama de ser considerado apenas um Shell fácil, para Iniciantes, pela sua simplicidade, praticidade e facilidade de uso, mas não foi inventado para isso, e sim para ser um moderno melhoramento, quando comparado ao Bash.
Tem bons recursos , diferentes e inovadores e, por isso, é muito apreciado e utilizado também por muitos outros usuários intermediários, e até por profissionais. O Fish tem fãs no Mundo todo!.
4. INSTALAR E USAR:
Por ser um Shell relativamente bem conhecido e importante, o Fish está presente como pacote na maioria das distros. Basta você instalar o pacote chamado “fish” usando o Gerenciador de Pacotes ou os comandos padrão na sua Distro.
No meu caso, está instalado no Sabayon e no OpenSUSE.
Não abordarei aqui a maneira de de “trocar” definitivamente o Bash pelo Fish, mesmo porque não troco definitivamente, pois eu uso mais de um shell.
Inclusive, não recomendo trocar, por causa do Root, por causa de Scripts etc… De repente, pode precisar do Bash.
Mas se quiser setar o Fish em definitivo, consulte estes Tutoriais:
How to Set Fish as the Default Shell.
Unable to Change Shell from Bash to Fish.
About Change Your Shell from Bash to Fish.
Step-by-Step How-To for Change Login Shell.
Procedimento fácil para trocar o Shell, do nosso Amigo EDPS, Dono deste Blog. Veja o Comentário nesta Dica.
Instalado, abra seu terminal, o padrão ou qualquer outro. Estará no Bash. Simples, digite:
$ fish
E pronto, já estará usando Fish. Reconhecerá que está nele, pois aparecerá uma mensagem “Benvindo ao Fish, “Friendly Interactive Shell”. Para ver qual o Shell padrão, tente o comando:
$ echo $SHELL
Para ver todos os Shell instalados, use este comando:
$ cat /etc/shells
Um comando que só funciona com Fish, lhe mostra inequivocamente que Fish é o Shell em uso:
$ ps -p %self
Teste agora com um comando qualquer. Verá que tem ótimos recursos de autocompletar os comandos! Automático! Vai usando Fish, porque é bom! Alguns comandos, PIDs etc… são diferentes, mas o Fish sugere o que fazer e ainda, busque na Internet, porque tem farta documentação.
Neste Artigo, eu instalei e configurei em OpenSUSE e em Sabayon, mas para a sua Distro, possívelmente achará os pacotes Fish e Oh-My-Fish nos repositórios, porque são bem conhecidos.
5. PERSONALIZAR USANDO FISH_CONFIG (FEITO EM OpenSUSE)
Personalizar o seu “Fish”, deixando bonito como um “Peixe de Aquário”…. Até aí, é fácil. Ele tem um configurador com interface Web.
Abra um terminal Fish, como descrito no Item 4. Abra seu navegador de Internet favorito. Execute este comando:
$ fish_config
Uma janela se abrirá no browser. Existem alguns Tutoriais.

Escolha o Tema de cores (“Colors”). Se desejar trocar algumas cores, clique à direita em “Customize”. Após acertar o Tema, clique em “Set Theme”.
Clique acima, na Aba “Prompt”. Escolha um Tema de Terminal. Eu partí de um chamado “Nim”, porque é completo, com hora local etc…
Selecionado o Tema do Prompt, clique em “Set Prompt”. Se não tiver prática, não modifique funções, nem variáveis. Pode fechar o configurador e o navegador.
Pronto, pode brincar com seu Terminal Fish! No OpenSUSE, veja Item 9.
6. PERSONALIZAR USANDO Oh-My-Fish, EM SABAYON LINUX
Agora vamos brincar mais um pouco.
Quando fiz as personalizações do Fish, no Sabayon Linux, notei que as cores não apareciam no emulador de terminal do KDE, o Konsole, embora funcionassem em Xterm puro.
Então optei por personalizar usando o Oh-My-Fish (outro Site):
How to Install Fish Shell and Oh-My-Fish.
How to Install Fish Shell and Oh-My-Fish.
É tão fácil quanto graficamente e tem muitos Temas.
o Oh-My-Fish não existe mais nos repositórios do Sabayon e do Gentoo. Então optei pela versão mais atual e completa, hospedada no GitHub.
Se seguiu meu artigo até aqui, deve ter o pacote fish instalado. Se não tiver, instale.
Para instalar o Oh-My-Fish, crie um diretório que conheça a localização, clone (precisa de GIT instalado) o Oh-My-Fish e o instale.
Tudo pode ser feito como usuário comum, com os comandos:
$ cd / $ cd ~/ $ mkdir OMF $ cd OMF $ git clone https://github.com/oh-my-fish/oh-my-fish.git $ cd oh-my-fish $ fish $ curl -L https://get.oh-my.fish | fish $ omf update
Instruções completas estão no Arquivo README.md.
O utilitário dentro do Oh-My-Fish, chamado omd, com o comando “omd update”, atualiza o Oh-My-Fish. Agora instalar um Tema de sua escolha. Há muitos.
$ omd theme (veja que existem muitos temas)
O que eu escolhi se chama JACAETEVHA , do programador Americano Jason Roberts.
Ele é Unicode, por isso, vai funcionar em Português, em qualquer emulador de terminal Unicode.
O meu Sabayon Linux é KDE, por isso usei Konsole e Yakuake. mas adianto que o tema funcionou em XTerm puro, em Mrxvt.
O Tema foi instalado com o comando:
$ omd install jacaetevha
Agora, basta abrir um terminal , digitar “fish” e enter, e pronto, já tem Fish no Sabayon. Veja Item 10.
7. OUTRAS MANEIRAS DE CONFIGURAR FISH:
Outras maneiras de personalizar são menos simples. Pode usar comandos, editar os arquivos de configuração manualmente, usar os Scripts do Fish-Config,
8. ONDE AS CONFIGURAÇÕES SÃO ARMAZENADAS?
Neste ponto, importante salientar que o Fish não tem um .fishrc (tipo o ~/.bashrc, onde ficam armazenadas as configurações do Bash, na pasta de usuário).
Você pode criar um fishrc, mas por default, ele não tem. Também não há função PS1 (para personalizar) embora você possa fazer.
Aí que está, dependendo de como foi configurado e personalizado, ele armazenará as configurações em locais, caminhos, paths, diferentes. Pode ser , e geralmente é na /home, na pasta do usuário, em ~/.config/fish/config.fish , mas também pode ser em outros locais. Como em init.fish.
9. MEU SHELL FISH, PERSONALIZADO, no OpenSUSE.
Por exemplo, após instalar Fish em meu OpenSUSE, notei que meus arquivos de configuração dele, não estavam em ~/.config/fish/config.fish , mas sim em /etc/fish/config.fish e /usr/share/fish/config.fish :
$ cd / $ locate config.fish (ou find -name config.fish) /etc/fish/config.fish /usr/share/fish/config.fish
Eles eram idênticos, e não continham os parâmetros do Temas, Cores etc…, minhas personalizações do prompt. Copiei o arquivo /etc/fish/config.fish para ~/.config/fish/config.fish, mas isso não mudou nada…
A minha instalação default também criou um arquivo ~/.config/fish/fishd.linux-jq5x , contendo só configs default, além de uma pasta /etc/fish/conf.d.
Nada que eu pudesse editar direto, que ajudasse, e eu queria personalizar mais um pouco.
Após uma pequena pesquisa na net, descobrí que o prompt meu, estava armazenado em ~/.config/fish/functions/fish_prompt.fish . Todas as versões novas do Fish, são assim.
Agora ficou mais fácil…. Se quiser, faça como eu…
Com seu editor de texto em modo Root (eu gosto de usar Geany), edite o arquivo ~/.config/fish/functions/fish_prompt.fish. Lembro que no meu caso, no OpenSUSE, o sudo gráfico é xdg-su -c. Copie o original para não perder (sempre uma boa prática):
$ cd / $ cd home/usuario/.config/fish/functions $ sudo cp fish_prompt.fish fish_prompt.fish.original $ xdg-su -c geany fish_prompt.fish
Você pode usar o original, o meu ou modificar. Para exemplificar e servir de Guia, exemplo, para quem quiser, eu fiz alguns comentários no arquivo.
# Gerado automatico pelo fish_config, setado para # Tema inicial Nim. # Desenvolvido pelo Time Fish, 2017. # https://fishshell.com/release_notes.html # Personalizado e Modificado por Albfneto, 2018. #albfneto@fcfrp.usp.br #Inicio, não mudei. function fish_prompt and set retc green or set retc red tty | string match -q -r tty and set tty tty or set tty pts # Adicionei estas linhas para identificar cada campo: echo -n 'Usuario, Hostname, Diretorio, Data e Hora.' echo # Original, não mudei. set_color $retc if [ $tty = tty ] echo -n .- else echo -n '┬─' end set_color -o green echo -n [ if test "$USER" = root -o "$USER" = toor set_color -o red else set_color -o yellow end echo -n $USER set_color -o white echo -n @ if [ -z "$SSH_CLIENT" ] set_color -o blue else set_color -o cyan end # Usuario e Hostname: echo -n (prompt_hostname) # Cores ANSI, mudei para branco, aparecia em Ciano set_color -o white # Aparecem os diretorios, nao mudei. #echo -n :(prompt_pwd) echo -n :(pwd|sed "s=$HOME=~=") set_color -o green echo -n ']' set_color normal set_color $retc if [ $tty = tty ] echo -n '-' else echo -n '─' end set_color -o green echo -n '[' set_color normal # mudei cor da definida, para violeta. set_color -o purple #$retc # mudei para exibir Data e Hora, Original, só Hora. # Como editar, veja: # https://www.lifewire.com/display-date-time-using-linux-command-line-4032698 echo -n (date +%x) echo -n ' - ' echo -n (date +%X) set_color -o green echo -n ] if type -q acpi if [ (acpi -a 2> /dev/null | string match -r off) ] echo -n '─[' set_color -o red echo -n (acpi -b|cut -d' ' -f 4-) set_color -o green echo -n ']' end end echo set_color normal for job in (jobs) set_color $retc if [ $tty = tty ] echo -n '; ' else echo -n '│ ' end set_color brown echo $job end set_color normal set_color $retc if [ $tty = tty ] echo -n "'->" else echo -n '╰─>' end set_color -o red echo -n '$ ' set_color normal end
Eis como ficou meu Terminal personalizado com Fish.OpenSUSE Tumbleweed, 32bits, sessão aberta em MATE configurado.
Lembre que parti da configuração gráfica, com fish_config (Tema do prompt é “Nim”) e mudei algumas cores e espaçamentos, e adicionei Data, além da Hora. Usuário aparece em amarelo, Hostname em ciano, Diretório em branco, Data e Hora em Violeta e prompt de cursor, em vermelho.

10. MEU SHELL FISH, PERSONALIZADO, no Sabayon LINUX.
Agora, meu terminal com Shell Fish, configurado no Sabayon Linux 18.05, sessão em KDE.
Após rodar o Oh-My-Fish e escolher o Tema (veja: Item 6), os arquivos de configuração do tema, estarão em: /home/usuario/.local/share/omf/themes/jacaetevha/fish_prompt.fish e /home/usuario/.local/share/omf/themes/jacaetevha/fish_right_prompt.fish
Você pode usar o padrão do Tema, ou pode modificar, trocar cores, traduzir, como eu fiz.
Para isso, copie para proteger e depois edite os arquivos, com um editor de texto em modo Root. Como eu havia dito, eu gosto de usar Geany ou Kate, mas fica ao gosto do freguês:
$ cd / $ cd ~/.local/share/omf/themes/jacaetevha $ sudo cp fish_prompt.fish fish_prompt.fish.original $ sudo cp fish_right_prompt.fish fish_right_prompt.fish.original $ kdesu geany fish_right_prompt.fish $ kdesu geany fish_prompt.fish
Se quiser personalizar, fazer seu próprio terminal Fish, pode se basear ou modificar o meu.
Por exemplo, eu troquei cores, mudei o formato de data (para ficar mais legal em português) etc… O Arquivo “prompt” é o prompt propriamente dito, e o arquivo “right_prompt”, é a data do lado direito do terminal, uma característica desse Tema.
Os arquivos meus ficaram assim:
# ARQUIVO ~/.local/share/omf/themes/jacaetevha/fish_right_prompt.fish # Arquivo original da Data, do Tema de Oh-My-Fish, JACAETEVHA, por: # Jason Roberts. EUA. # Modificado por albfneto (albfneto@fcfrp.usp.br>, 2018 # Versão 3. function fish_right_prompt -d "Write out the right prompt" set_color yellow #troquei aqui o parãmetro de "date" sozinho, para +%c,pois fica melhor # nas configurações brasileiras: date +%c set_color normal end # .......................................................................... # ARQUIVO ~/.local/share/omf/themes/jacaetevha/fish_prompt.fish # name: Arquivo principal de configuração do #Tema Jacaetevha, para Oh-My-Fish. # Por Jason Roberts, EUA. # Modificado por Albfneto, Brasil, 2018, versão 5 <albneto@fcfrp.usp.br> function tbytes -d 'calculates the total size of the files in the current directory' set -l tBytes (ls -al | grep "^-" | awk 'BEGIN {i=0} { i += $5 } END { print i }') if test $tBytes -lt 1048576 set -g total (echo -e "scale=3 \n$tBytes/1048 \nquit" | bc) set -g units " Kb" else set -g total (echo -e "scale=3 \n$tBytes/1048576 \nquit" | bc) set -g units " Mb" end echo -n "$total$units" end function fish_prompt set_color yellow printf '%s' (whoami) set_color normal printf ' em ' # troquei aqui de magenta, para violeta: set_color purple printf '%s' (hostname|cut -d . -f 1) set_color normal printf ' no dir: ' set_color $fish_color_cwd printf '%s ' (prompt_pwd) set_color blue printf '%s' (tbytes) set_color green # troquei o prompt Fish GIT, para o prompt normal. # Fish GIT, comentado: # printf '%s' (__fish_git_prompt) # Prompt Normal: printf '%s' # Line 2 echo if test $VIRTUAL_ENV # troquei as cores, prompt verde e um pouco mudado printf "(%s) " (set_color blue)(basename $VIRTUAL_ENV)(set_color green) end printf ' $ ↪' set_color normal end
Vejam na Imagem, como ficou meu Terminal Fish (embaixo) no Sabayon Linux 18.05, com KDE. terminal é Konsole, cores solarizadas.
Aproveitando a imagem, em acima, veja o terminal suspenso Yakuake (próprio para KDE), com meu Shell principal, Bash, também personalizado.

Para meu arquivo do Bash personalizado, você pode baixar da minha área do Google Drive, e gravar em ~/.bashrc .
Brinque você também com o Shell Fish. Até a próxima!
Gostei bastante do blog, Seus artigos sobre o void linux me ajudaram muito. Obrigado por compartilhar seu conhecimento conosco!
CurtirCurtir