Oh-My-Zsh le bash sous vitamines

Oh-My-Zsh est un outil qui permet de remplacer bash, votre interpréteur de commande. Bash est un interpréteur interactif qui se lance par défaut lorsqu’on ouvre un terminal ou tty. Les puristes utiliseront le fichier ~/.bashrc pour configurer leur bash aux petits oignons. Pour se simplifier la vie et utiliser un interpréteur qui a été pensé pour les cas et habitudes d’utilisation, il faut opter pour Oh-My-Zsh. Il contient une foultitude de raccourcis et des notations et affichages qui permettent d’optimiser votre workflow.

Installation :

Pour commencer, il faut installer un logiciel sur lequel il se base, j’ai nommé zsh :

apt-get install zsh

Une fois fait, on lance le ‘one-liner’ qui est présent sur le dépôt Github de Oh-My-Zsh :

sh -c "$(wget https://raw.githubusercontent.com/robbyrussell/oh-my-zsh/master/tools/install.sh -O -)"

Oh-My-Zsh comme interpréteur par défaut :

Dès qu’il est installé, le terminal dans lequel on se trouve va lancer directement Oh-My-Zsh. Il nous faut maintenant le définir comme interpréteur par défaut.

Pour se faire, deux méthodes :

  • modifier en fin de ligne sur l’utilisateur correspondant dans le fichier /etc/passwd en changeant /bin/bash par /usr/bin/zsh
  • modifier l’interpréteur par défaut avec la commande :
chsh -s /usr/bin/zsh root

Une fois fait pour l’utilisateur de notre choix, on peut fermer les terminaux ouverts, puis en ouvrir un nouveau pour s’apercevoir que Oh-My-Zsh est lancé par défaut.

Les fichiers importants sont les suivants :

  • ~/.zshrc : (fichier de configuration principal)
  • ~/.zsh_history : (historique des commandes, équivalent de ~/.bash_history)
  • ~/.oh-my-zsh/custom/custom-envars.zsh : (emplacement conseillé pour les variables d’environnement)

Je vous met ici mon fichier .zshrc comme exemple :

# If you come from bash you might have to change your $PATH.
export PATH=$HOME/bin:/usr/local/bin:$PATH
#export PATH=$HOME/programs

# Path to your oh-my-zsh installation.
export ZSH=/root/.oh-my-zsh

# Set name of the theme to load. Optionally, if you set this to "random"
# it'll load a random theme each time that oh-my-zsh is loaded.
# See https://github.com/robbyrussell/oh-my-zsh/wiki/Themes
ZSH_THEME="robbyrussell"

# Uncomment the following line to use case-sensitive completion.
# CASE_SENSITIVE="true"

# Uncomment the following line to use hyphen-insensitive completion. Case
# sensitive completion must be off. _ and - will be interchangeable.
# HYPHEN_INSENSITIVE="true"

# Uncomment the following line to disable bi-weekly auto-update checks.
# DISABLE_AUTO_UPDATE="true"

# Uncomment the following line to change how often to auto-update (in days).
# export UPDATE_ZSH_DAYS=13

# Uncomment the following line to disable colors in ls.
# DISABLE_LS_COLORS="true"

# Uncomment the following line to disable auto-setting terminal title.
# DISABLE_AUTO_TITLE="true"

# Uncomment the following line to enable command auto-correction.
# ENABLE_CORRECTION="true"

# Uncomment the following line to display red dots whilst waiting for completion.
# COMPLETION_WAITING_DOTS="true"

# Uncomment the following line if you want to disable marking untracked files
# under VCS as dirty. This makes repository status check for large repositories
# much, much faster.
# DISABLE_UNTRACKED_FILES_DIRTY="true"

# Uncomment the following line if you want to change the command execution time
# stamp shown in the history command output.
# The optional three formats: "mm/dd/yyyy"|"dd.mm.yyyy"|"yyyy-mm-dd"
# HIST_STAMPS="mm/dd/yyyy"

# Would you like to use another custom folder than $ZSH/custom?
# ZSH_CUSTOM=/path/to/new-custom-folder

# Which plugins would you like to load? (plugins can be found in ~/.oh-my-zsh/plugins/*)
# Custom plugins may be added to ~/.oh-my-zsh/custom/plugins/
# Example format: plugins=(rails git textmate ruby lighthouse)
# Add wisely, as too many plugins slow down shell startup.

# Plugins
plugins=(git python ruby pip rails tmux web-search)

# Tmux autostart function
# ZSH_TMUX_AUTOSTART=true

source $ZSH/oh-my-zsh.sh

# User configuration

# export MANPATH="/usr/local/man:$MANPATH"

# You may need to manually set your language environment
# export LANG=en_US.UTF-8

# Preferred editor for local and remote sessions
# if [[ -n $SSH_CONNECTION ]]; then
# export EDITOR='vim'
# else
# export EDITOR='mvim'
# fi

# Compilation flags
# export ARCHFLAGS="-arch x86_64"

# ssh
# export SSH_KEY_PATH="~/.ssh/rsa_id"

# Set personal aliases, overriding those provided by oh-my-zsh libs,
# plugins, and themes. Aliases can be placed here, though oh-my-zsh
# users are encouraged to define aliases within the ZSH_CUSTOM folder.
# For a full list of active aliases, run `alias`.
#
# Example aliases
# alias zshconfig="mate ~/.zshrc"
# alias ohmyzsh="mate ~/.oh-my-zsh"

export VPNWALL="https://www.vpnwall.xyz"
export PATH="/root/armitage:/opt/metasploit-framework:/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin"

alias ducks='du -cks * | sort -rn | head'
alias macgitnew="git init ; git add * ; git commit -m 'initial commit' ; git remote add origin https://mondepotgit.local/user/projet.git; git push -u origin master"
alias macgitpush="git add * ; git commit -m "Nicely updated" ; git push -u origin master"
alias agi="apt-get install -y"
alias tmux='tmux -u'
alias nano='nano -F -c -i'

# Shell integration with Pushbullet
eval "$(ntfy shell-integration)"

Vous remarquerez que je n’ai pas respecté les préconisations du logiciel, à savoir mettre mes ‘export’ et ‘aliases’ dans un fichier à part, normalement conseillé dans ~/.oh-my-zsh/custom/myvars.zsh.

Une autre fonction utile si vous utilisez également tmux est de partager l’historique de vos commandes sur tous vos terminaux. Vous pouvez arriver à ce résultat en ajoutant ce qui suit à votre fichier ~/.bashrc :

HISTCONTROL=ignoredups:ignorespace
shopt -s histappend
HISTSIZE=1000
HISTFILESIZE=2000
shopt -s checkwinsize

Une fois fait, fermez tous les terminaux ouverts et ouvrez-en deux différents. Tapez une commande dans le premier et puis appuyer sur la flèche du haut du clavier dans le deuxième terminal pour vous apercevoir qu’il vous affiche la commande que vous venez de rentrer dans le premier. L’historique des commandes tapées est maintenant partagé entre vos terminaux d’un même utilisateur. Ce mode de fonctionnement peut déstabiliser mais il fait gagner encore un peu plus de temps, faites moi confiance.