<?xml version="1.0" encoding="utf-8" standalone="yes"?><rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom" xmlns:content="http://purl.org/rss/1.0/modules/content/"><channel><title>Shell on FtBx.fr</title><link>https://ftbx.fr/tags/shell/</link><description>Recent content in Shell on FtBx.fr</description><image><title>FtBx.fr</title><url>https://ftbx.fr/images/placeholder-image.jpg</url><link>https://ftbx.fr/images/placeholder-image.jpg</link></image><generator>Hugo -- 0.146.6</generator><language>fr</language><copyright>2025 ftbx.fr - This work is licensed under CC BY-NC-SA 4.0</copyright><lastBuildDate>Sun, 08 Jun 2025 00:00:00 +0000</lastBuildDate><atom:link href="https://ftbx.fr/tags/shell/index.xml" rel="self" type="application/rss+xml"/><item><title>just : un Makefile moderne que j'ai quitté pour make</title><link>https://ftbx.fr/posts/just-makefile-moderne-que-jai-quitte-make/</link><pubDate>Sun, 08 Jun 2025 00:00:00 +0000</pubDate><guid>https://ftbx.fr/posts/just-makefile-moderne-que-jai-quitte-make/</guid><description>&lt;p>J&amp;rsquo;ai découvert &lt;code>just&lt;/code> en parcourant des projets Rust lorsque j&amp;rsquo;ai commencé à apprendre le langage.&lt;/p>
&lt;p>&lt;code>just&lt;/code> c&amp;rsquo;est un Makefile sans la syntaxe particulière de Make. Les recettes sont
plus lisibles, le langage est pensé pour lancer des commandes (pas pour
compiler du C). Et la syntaxe des dépendances est plus intuitive :&lt;/p>
&lt;div class="highlight">&lt;pre tabindex="0" class="chroma">&lt;code class="language-justfile" data-lang="justfile">&lt;span class="line">&lt;span class="cl">&lt;span class="c"># justfile
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="c">&lt;/span>&lt;span class="nf">deploy&lt;/span>&lt;span class="o">:&lt;/span> &lt;span class="n">build&lt;/span> &lt;span class="n">push&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> kubectl apply -f deploy/
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="nf">build&lt;/span>&lt;span class="o">:&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> docker build -t monapp .
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="nf">push&lt;/span>&lt;span class="o">:&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> docker push monapp:latest
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;p>Moi qui ai tendance à utiliser pas mal Make pour ce genre de raccourcis (et jamais pour builder du C), ça m&amp;rsquo;a convaincu pendant 3 mois. Puis j&amp;rsquo;ai travaillé sur des machines où &lt;code>just&lt;/code> n&amp;rsquo;était pas installé. Et là, Make est toujours installé. Prêt à opérer. Aucun obstacle.&lt;/p></description></item><item><title>zellij : pourquoi je n'ai jamais eu besoin de tmux</title><link>https://ftbx.fr/posts/zellij-pourquoi-je-nai-jamais-eu-besoin-tmux/</link><pubDate>Sun, 19 Jan 2025 00:00:00 +0000</pubDate><guid>https://ftbx.fr/posts/zellij-pourquoi-je-nai-jamais-eu-besoin-tmux/</guid><description>&lt;p>Je n&amp;rsquo;ai jamais utilisé &lt;code>tmux&lt;/code>. Pas par principe, juste parce que
quand j&amp;rsquo;ai commencé à chercher un multiplexer, &lt;code>zellij&lt;/code> est tombé
au bon moment.&lt;/p>
&lt;p>C&amp;rsquo;est contre-intuitif : tmux est plus réputé, plus ancien, installé
partout. Mais zellij a une qualité rare : il est utilisable sans
config. Pas de &lt;code>.tmux.conf&lt;/code> à écrire. Pas de préfixes bizarres à
mémoriser. Une barre d&amp;rsquo;état qui montre les onglets et les processus
en cours, sans plugin. Des raccourcis qu&amp;rsquo;on découvre en appuyant
sur &lt;code>Ctrl+G&lt;/code>.&lt;/p></description></item><item><title>direnv + .envrc : j'arrête de source des variables à la main</title><link>https://ftbx.fr/posts/direnv-envrc-jarrete-source-variables-e-a-main/</link><pubDate>Sun, 22 Sep 2024 00:00:00 +0000</pubDate><guid>https://ftbx.fr/posts/direnv-envrc-jarrete-source-variables-e-a-main/</guid><description>&lt;p>J&amp;rsquo;en avais assez de taper &lt;code>source .env&lt;/code> en entrant dans chaque projet. Et surtout
d&amp;rsquo;oublier de le faire une fois sur trois, et de perdre 10 minutes à comprendre
pourquoi la variable d&amp;rsquo;environnement n&amp;rsquo;était pas chargée.&lt;/p>
&lt;p>&lt;code>direnv&lt;/code> règle ça en un hook shell. Tu entres dans un dossier, il exécute
&lt;code>.envrc&lt;/code>. Tu en sors, il décharge tout. Plus rien à faire.&lt;/p>
&lt;p>Mais ce qui change tout, c&amp;rsquo;est quand on le combine avec un password manager en CLI (pour ma part &lt;code>rbw&lt;/code>) pour injecter les secrets automatiquement :&lt;/p></description></item><item><title>fzf + rg + fd : la trinité qui rend mon terminal plus rapide que l'explorateur</title><link>https://ftbx.fr/posts/fzf-rg-fd-a-trinite-qui-rend-mon-terminal-plus-rapide-que-explorateur/</link><pubDate>Sat, 03 Aug 2024 00:00:00 +0000</pubDate><guid>https://ftbx.fr/posts/fzf-rg-fd-a-trinite-qui-rend-mon-terminal-plus-rapide-que-explorateur/</guid><description>&lt;p>Trois outils. Chacun remplace un binaire POSIX vieux de 40 ans.
Ensemble, ils transforment le terminal en interface plus rapide
que n&amp;rsquo;importe quel explorateur graphique.&lt;/p>
&lt;p>Alors oui, c&amp;rsquo;est dans les vieux pots qu&amp;rsquo;on fait les meilleures soupe et si un binaire qui a 40 ans est toujours utilisé, c&amp;rsquo;est qu&amp;rsquo;il y a une bonne raison, mais là, ce serait dommage de se privée d&amp;rsquo;une UX shell bien léchée.&lt;/p>
&lt;p>&lt;strong>&lt;code>fd&lt;/code>&lt;/strong> remplace &lt;code>find&lt;/code>. Même usage, syntaxe humaine :&lt;/p></description></item><item><title>zoxide : j'ai remplacé cd et ma mémoire musculaire a survécu</title><link>https://ftbx.fr/posts/zoxide-jai-remplace-cd-ma-memoire-musculaire-a-survecu/</link><pubDate>Sun, 14 Jul 2024 00:00:00 +0000</pubDate><guid>https://ftbx.fr/posts/zoxide-jai-remplace-cd-ma-memoire-musculaire-a-survecu/</guid><description>&lt;p>&lt;code>zoxide&lt;/code> remplace &lt;code>cd&lt;/code> par un saut intelligent. Tu tapes &lt;code>z projet&lt;/code> et il
t&amp;rsquo;emmène dans le dossier &lt;code>projet&lt;/code>, même s&amp;rsquo;il est à 4 niveaux de profondeur.
Il apprend tes habitudes : plus tu vas souvent dans un dossier, plus il
le priorise.&lt;/p>
&lt;p>La commande s&amp;rsquo;appelle &lt;code>z&lt;/code>. Pas &lt;code>zoxide&lt;/code>, pas &lt;code>zoxide cd&lt;/code>. Juste &lt;code>z&lt;/code>.
Un alias &lt;code>alias cd=&amp;quot;z&amp;quot;&lt;/code> et ni vu ni connu !&lt;/p>
&lt;h3 id="setup">Setup&lt;/h3>
&lt;div class="highlight">&lt;pre tabindex="0" class="chroma">&lt;code class="language-bash" data-lang="bash">&lt;span class="line">&lt;span class="cl">&lt;span class="c1"># Installer&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">sudo apt install zoxide &lt;span class="c1"># ou cargo install zoxide&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="c1"># Ajouter à .zshrc / .bashrc&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="nb">eval&lt;/span> &lt;span class="s2">&amp;#34;&lt;/span>&lt;span class="k">$(&lt;/span>zoxide init zsh --cmd z&lt;span class="k">)&lt;/span>&lt;span class="s2">&amp;#34;&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="c1"># (Le --cmd z renomme la commande en &amp;#39;z&amp;#39; au lieu de &amp;#39;zoxide&amp;#39;)&lt;/span>
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;h3 id="cheatsheet-zoxide">Cheatsheet zoxide&lt;/h3>
&lt;table>
&lt;thead>
&lt;tr>
&lt;th>Commande&lt;/th>
&lt;th>Équivalent cd&lt;/th>
&lt;th>Effet&lt;/th>
&lt;/tr>
&lt;/thead>
&lt;tbody>
&lt;tr>
&lt;td>&lt;code>z projet&lt;/code>&lt;/td>
&lt;td>&lt;code>cd ~/dev/machin/truc/projet&lt;/code>&lt;/td>
&lt;td>Va au dossier le plus utilisé contenant &amp;ldquo;projet&amp;rdquo;&lt;/td>
&lt;/tr>
&lt;tr>
&lt;td>&lt;code>z proj bidule&lt;/code>&lt;/td>
&lt;td>-&lt;/td>
&lt;td>Combine &amp;ldquo;proj&amp;rdquo; et &amp;ldquo;bidule&amp;rdquo; pour trouver&lt;/td>
&lt;/tr>
&lt;tr>
&lt;td>&lt;code>zi&lt;/code>&lt;/td>
&lt;td>-&lt;/td>
&lt;td>Interface interactive avec fzf&lt;/td>
&lt;/tr>
&lt;tr>
&lt;td>&lt;code>z -&lt;/code>&lt;/td>
&lt;td>&lt;code>cd -&lt;/code>&lt;/td>
&lt;td>Retour au dossier précédent&lt;/td>
&lt;/tr>
&lt;tr>
&lt;td>&lt;code>z ..&lt;/code>&lt;/td>
&lt;td>&lt;code>cd ..&lt;/code>&lt;/td>
&lt;td>Remonte d&amp;rsquo;un niveau&lt;/td>
&lt;/tr>
&lt;/tbody>
&lt;/table>
&lt;p>Le &lt;code>zi&lt;/code> avec fzf est le plus utile : tu tapes &lt;code>zi&lt;/code>, tu scrolles dans ton historique,
tu choisis. Plus rapide que &lt;code>cd $(find . -type d | fzf)&lt;/code>.&lt;/p></description></item><item><title>shell set -euo pipefail : l'option qui m'a sauvé 100 heures de debug</title><link>https://ftbx.fr/posts/shell-set-euo-pipefail-option-qui-ma-sauve-100-heures-debug/</link><pubDate>Sun, 05 Nov 2023 00:00:00 +0000</pubDate><guid>https://ftbx.fr/posts/shell-set-euo-pipefail-option-qui-ma-sauve-100-heures-debug/</guid><description>&lt;p>&lt;code>set -euo pipefail&lt;/code> devrait être la première ligne de tout script shell
non trivial après le shebang.&lt;/p>
&lt;div class="highlight">&lt;pre tabindex="0" class="chroma">&lt;code class="language-bash" data-lang="bash">&lt;span class="line">&lt;span class="cl">&lt;span class="cp">#!/bin/bash
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="cp">&lt;/span>&lt;span class="nb">set&lt;/span> -euo pipefail
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;p>Voilà pourquoi :&lt;/p>
&lt;p>&lt;strong>&lt;code>set -e&lt;/code>&lt;/strong> : le script s&amp;rsquo;arrête à la première commande qui échoue.
Sans ça, le script continue comme si de rien n&amp;rsquo;était après un &lt;code>cd /tmp/inexistant&lt;/code>.
J&amp;rsquo;ai perdu des heures à comprendre pourquoi un &lt;code>rm -rf&lt;/code> s&amp;rsquo;exécutait
dans le mauvais dossier à cause d&amp;rsquo;un &lt;code>cd&lt;/code> silencieusement raté.&lt;/p></description></item></channel></rss>