Bonnes pratiques¶
Sécurité, performance du shell, portabilité et multiplexeurs de terminal.
Sécurité¶
Ne jamais sourcer .env¶
Les fichiers .env contiennent des secrets. Ne les sourcez jamais directement dans le shell :
# DANGER — les secrets restent dans l'environnement et l'historique
source .env
# CORRECT — utiliser un outil dedie
# direnv charge/decharge automatiquement les variables par repertoire
brew install direnv
echo 'eval "$(direnv hook zsh)"' >> ~/.zshrc
Avec direnv, un fichier .envrc est charge automatiquement quand vous entrez dans le répertoire et decharge quand vous en sortez :
# .envrc (dans le repertoire du projet)
export DATABASE_URL="postgres://localhost:5432/mydb"
export API_KEY="secret-key"
# Autoriser ce repertoire
direnv allow
Historique
Les commandes contenant des secrets restent dans ~/.zsh_history. Prefixez avec un espace pour les exclure (si HIST_IGNORE_SPACE est active) :
Vérifier les scripts avant execution¶
# Ne jamais faire
curl https://example.com/install.sh | sh
# Toujours telecharger et inspecter d'abord
curl -O https://example.com/install.sh
bat install.sh # Lire le contenu
sh install.sh
Performance du shell¶
Temps de demarrage¶
Un shell lent au demarrage est frustrant. Objectif : < 200ms.
Lazy loading¶
Charger les outils lourds seulement quand ils sont utilises :
# Au lieu de charger nvm a chaque demarrage (lent)
# export NVM_DIR="$HOME/.nvm"
# [ -s "$NVM_DIR/nvm.sh" ] && . "$NVM_DIR/nvm.sh"
# Lazy load : charge nvm seulement au premier appel
nvm() {
unfunction nvm
export NVM_DIR="$HOME/.nvm"
[ -s "$NVM_DIR/nvm.sh" ] && . "$NVM_DIR/nvm.sh"
nvm "$@"
}
Compilation du .zshrc¶
Portabilité¶
Pour des scripts qui doivent fonctionner partout :
- Utilisez
#!/bin/sh(pas#!/bin/zsh) pour les scripts portables - Evitez les bashismes (
[[ ]],$(( ))) dans les scripts POSIX - Testez sur macOS et Linux (les utilitaires GNU vs BSD différent)
# Portable : fonctionne sur tout systeme POSIX
#!/bin/sh
if [ -f "$HOME/.config/app/config" ]; then
echo "Config trouvee"
fi
# Non portable : syntaxe Bash/Zsh specifique
#!/bin/bash
if [[ -f "$HOME/.config/app/config" ]]; then
echo "Config trouvee"
fi
Multiplexeurs de terminal¶
Un multiplexeur permet de :
- Garder des sessions actives apres deconnexion (SSH)
- Diviser le terminal en panneaux
- Organiser les sessions par projet
tmux¶
# Installation
brew install tmux
# Commandes de base
tmux new -s projet # Nouvelle session nommee
tmux attach -t projet # Rejoindre une session
tmux ls # Lister les sessions
Raccourcis tmux (apres le préfixe Ctrl+B) :
| Raccourci | Action |
|---|---|
c | Nouvelle fenêtre |
% | Split vertical |
" | Split horizontal |
d | Detacher la session |
n / p | Fenêtre suivante / précédente |
z | Zoom un panneau |
Zellij (alternative moderne)¶
Zellij affiche les raccourcis en bas de l'écran — pas besoin de memoriser.
tmux vs Zellij
tmux est le standard etabli avec un ecosysteme massif de plugins. Zellij est plus intuitif pour les debutants. Les deux font le même travail.