Sommaire
Est-ce que les gags les moins longs notamment sur celui d'insister sur le fait que bash est un langage de programmation, ne seraient pas les plus courts ?
Et bien non.
Mi rigolade, mi sérieux, j'aimerais vous introduire à un projet pour lequel, mes connaissances que je tente toujours d'étendre jusqu'à mes limites d'incompréhension et que je viens d'atteindre, pour lequel, dis je, il y a une utilité.
Le code est ici : https://gist.github.com/jul/ef4cbc4f506caace73c3c38b91cb1ea2
et si vous faîtes ./mr_freeze.sh usage vous aurez l'aide.
Comment ça marche
Déjà le programme arrive avec son jeu de test (pour moi) dont on enregistre les sorties ainsi
./mr_freeze.sh freeze input 'a*' badass 'oh un espace'
On enregistre pour toutes les LIGNES (pas de continuation avec \ possible) avec une commande par ligne qui peut avoir une variable $A … $H permettant d'accéder à $3 … $10
les résultats des commandes et la sortie est ainsi :
✍️ recording: uname -a #immutable
✍️ recording: date # mutable
✍️ recording: slmdkfmlsfs # immutable
✍️ recording: du -sh #immutable (kof kof)
✍️ recording: du #immutable (kof kof)
✍️ recording: ls "$A" #mutable according to \$3"
✍️ recording: ssh $B 'uname -a'
✅ [replay_input] created use [./mr_freeze.sh thaw "replay_input" "a*" "badass" "oh un espace"] to replay
et quand on entre la commande
./mr_freeze.sh thaw "replay_input" "a*" "badass" "oh un espace"
on obtient
👌 uname -a #immutable
🔥 date # mutable
@@ -1 +1 @@
-dim. 09 nov. 2025 14:05:01 CET
+dim. 09 nov. 2025 14:06:01 CET
👌 slmdkfmlsfs # immutable
👌 du -sh #immutable (kof kof)
👌 du #immutable (kof kof)
👌 ls "$A" #mutable according to \$3"
👌 ssh $B 'uname -a'
la date qui est mutable ayant changé on a un diff de la sortie et mieux si on entre :
./mr_freeze.sh thaw "replay_input" "a*" "petiot"
on obtient :
👌 uname -a #immutable
🔥 date # mutable
@@ -1 +1 @@
-dim. 09 nov. 2025 14:07:34 CET
+dim. 09 nov. 2025 14:07:46 CET
👌 slmdkfmlsfs # immutable
👌 du -sh #immutable (kof kof)
👌 du #immutable (kof kof)
👌 ls "$A" #mutable according to \$3"
🔥 ssh $B 'uname -a'
@@ -1 +1 @@
-Linux badass 6.8.0-85-generic #85-Ubuntu SMP PREEMPT_DYNAMIC Thu Sep 18 15:26:59 UTC 2025 x86_64 x86_64 x86_64 GNU/Linux
+FreeBSD petiot 14.3-RELEASE-p5 FreeBSD 14.3-RELEASE-p5 GENERIC amd64
Ce qui est ma foi for pratique. Et en plus, j'ai pas la couleur en markdown, mais sinon la sortie du diff est colorée car JE DÉTESTE les gens en ksh/sh sous BSD … ssh. Mouhahahaha
Un petit tour des curiosités du code.
J'ai pas que coder parce que j'avais un besoin, j'avais aussi envie de m'amuser, par exemple avec cette manière particulière de gérer les espaces passés dans la ligne de commande, sur le quel je m'arrachais les cheveux (peu nombreux qui me restent) en faisant une belle pirouette planquée dans du code que je préparais pour un troll futur : faisons du fonctionnel en bash.
Donc, je suis comme tout le monde, j'ai des problèmes de quote de porc avec bash et je vais vous illustrer ça dans 2 endroits du code ::
Les entrées pareilles, pas pareilles
ici
Vous voyez le code commenté ?
if [[ "$( echo $FROM | cat - )" != "$( echo $ACTUAL | cat - )" ]]; then
#if diff -q <( echo $FROM ) <( echo $ACTUAL ); then
#if [[ "$FROM" != "$ACTUAL" ]]; then
Et ben, il môrche pô.
En fait un od -a au cul de du nous apprends que la sortie réelle contient une tabulation, mais dans le mystère des pipes et echo il est transformé en espace.
Donc je normalise les sorties en faisant un echo et un pipe par cat - qui est en fait l'identité.
Qui a dit que ce que j'ai fait été porcasse ? :D Osef, ça marche.
et je t'embrouille ni vu ni connu sur la récupération des arguments de la CLI avec des espaces
ARG=()
for v in A B C D E F G H; do
eval $v=\"$1\";
ARG+=("$1")
shift
done
Alors je dois mapper les arguments de la ligne de commande à coup d'éval de $3 … $10 à $A … $H car j'ai structuré mon code en fonction (voir plus tard) et dans les fonction $3 … $10 sont masqués.
Tiens, au passage je colle ça dans un tableau (l'une des rares basheries qui est nécessaire à « programmer » facilement au même titre que les tableaux associatifs).
Et je le réutilise plus tard avec cette fumisterie de
echo "✅ [replay_${INPUT}] created use [$0 thaw \"replay_$INPUT\" $( map quote "${ARG[@]}" )] to replay"
Où la magie n'est ni dans quote, ni dans map, mais dans "${ARG[@]}"
Je vous montre au passage map et quote
map() {
f=$1;
shift
while [ -n "$1" ]; do
eval "$f" "$1"
shift
done
}
quote() { echo -n " \"$@\""; }
et non map quote $* en top level ne donne pas le résultat attendu, et je sais vraiment pas pourquoi.
Format « libexec »
Il est en C des objets comme curl qui selon qu'on l'appelle comme un code devient un executable, mais sinon est une librairie avec le même binaire.
Là j'ai tenté de reproduire le comportement avec une détection de sourçage pour faire un return 1 et éviter l'expérience désagréable du terminal qui quitte quand on source :) et sinon appeler les fonctions idoines avec les arguments passés.
Ainsi :
./mr_freeze.sh thaw "replay_input" "a*" "petiot"
est équivalent à
source ./mr_freeze.sh
thaw "replay_input" "a*" "petiot"
Et ainsi on peut utiliser le code comme un script et comme une librairie (même si je pollue un peu pas mal beaucoup le namespace).

# Disciple de Mallarmé ?
Posté par ǝpɐןƃu∀ nǝıɥʇʇɐW-ǝɹɹǝıԀ (site web personnel) . Évalué à 2 (+0/-0).
Tout est dans le titre.
« IRAFURORBREVISESTANIMUMREGEQUINISIPARETIMPERAT » — Odes — Horace
[^] # Re: Disciple de Mallarmé ?
Posté par Jul (site web personnel) . Évalué à 2 (+1/-0).
Avec l'orthographe, je suis plus disciple des mals armés :D
[^] # Re: Disciple de Mallarmé ?
Posté par BAud (site web personnel) . Évalué à 6 (+4/-0).
ce n'est pas lié à l'orthographe, mais plutôt (l'ami de Mickey<) à la superposition des informations en cours de phrase.
cf., par exemple, une explication de style Mallarmé
[^] # Re: Disciple de Mallarmé ?
Posté par ǝpɐןƃu∀ nǝıɥʇʇɐW-ǝɹɹǝıԀ (site web personnel) . Évalué à 5 (+3/-0).
Résumé en trois mots, le lien proposé par Baud donnerait : « Mallarmé : l'hermétisme. » Ma question se voulait une variante du classique « lapin compris. » Une manière de demander une reformulation plus accessible au commun des mortels de votre journal. Passée la première douzaine de phrase en n'entravant que pouic, j'ai laissé choir.
« IRAFURORBREVISESTANIMUMREGEQUINISIPARETIMPERAT » — Odes — Horace
[^] # Re: Disciple de Mallarmé ?
Posté par Jul (site web personnel) . Évalué à 3 (+2/-0).
À vi, cette grosse boulette où j'ai oublié de mettre en chapeau : à quoi ça sert
Ça sert à stocker et rejouer le résultat de commandes passées
J'ai un peu rushé le projet, doc comprise et je suis tête en l'air.
[^] # kinda asciinema
Posté par Gil Cot ✔ (site web personnel, Mastodon) . Évalué à 5 (+3/-0).
Oh, tu veux dire le couple
scriptetscriptreplay(ou justescript -p) ? ;)“It is seldom that liberty of any kind is lost all at once.” ― David Hume
[^] # Re: kinda asciinema
Posté par Jul (site web personnel) . Évalué à 2 (+1/-0).
Alors, j'ai essayé d'utiliser
scriptetscriptrelplaypour vérifier, mais non.1- j'arrive à comprendre comment mes outils marchent, pas ceux des autres (argument de mauvaise foi, certes, mais recevable)
2- je crois me souvenir que script/replay ne garde par les variables pour évaluation au moment du replay.
ce qui permet dans mon cas de modifier l’exécution et par le scriptage en passant des arguments positionnels, ou en utilisant des variables d'environnement, ou les 2 :D
J'ai un peu de perversion que
scriptn'a pas.[^] # Re: kinda asciinema
Posté par Gil Cot ✔ (site web personnel, Mastodon) . Évalué à 5 (+3/-0).
Oui, il n’y a pas (de base mais rien n’empêche qu’une implémentation l’ajoute) de jeu de variable ; c’est simplement de la « terminal session recording »
Ça reste dans le terminal et le format est textuel (mais avec les codes du terminal… donc lisible avec certains *pager*s en utilisant les bonnes options…) Dans le même esprit, mais à destination d’une publication web et non plus console, on a asciinema dont le format est plus évolué (c’est un genre de JSON et on a la possibilité d’annoter et autres.)
Comme autres alternatifs, il y a aussi : ttyrec, (sur lequel se base ttygif), showterm, termtosvg, t-rec, rewindtty, gosscript, terminal-recorder, ttystudio, terminalizer, menyoki, agg, et d’autres que j’ignore. Il y a de la place pour ton projet.
“It is seldom that liberty of any kind is lost all at once.” ― David Hume
[^] # Re: kinda asciinema
Posté par BAud (site web personnel) . Évalué à 4 (+2/-0).
ah oui, pour
ttyrec(etttyplay) il y avait eu un exemple utilisé dans ce journal :https://linuxfr.org/users/yazgoo/journaux/presentation-de-fuse_kafka-un-agent-de-logging-pour-kafka-fonde-sur-fuse
ça peut être pratique ;-) (et en plus c'est empaqueté dans Mageia \o/ bwalé, encore un autre truc sur ma ToDoList)
[^] # Re: kinda asciinema
Posté par Gil Cot ✔ (site web personnel, Mastodon) . Évalué à 4 (+2/-0).
J’aime bien la redécouverte de ce journal (: Merci.
“It is seldom that liberty of any kind is lost all at once.” ― David Hume
[^] # Re: kinda asciinema
Posté par Jul (site web personnel) . Évalué à 1 (+0/-0).
ça m'a donné envie de regarder les scripts pour m'en inspirer peut être pour une version future quand ma femme et ma fille me laisseront 2 sorties pour coder un peu plus loin.
Merci de l'idée.
[^] # Re: Disciple de Mallarmé ?
Posté par serol (site web personnel) . Évalué à 4 (+3/-0).
La reformulation est peut-être impossible, Mallarmé est «intraduisible, même en français».
# développement de variable
Posté par syntaxerror . Évalué à 7 (+6/-0). Dernière modification le 10 novembre 2025 à 07:44.
C'est le comportement normal de bash (voir le paragraphe "DÉVELOPPEMENTS" dans la page de man). Le développement en mots n'est pas fait si la variable est entre double quotes
[^] # Re: développement de variable
Posté par syntaxerror . Évalué à 3 (+2/-0). Dernière modification le 10 novembre 2025 à 07:45.
argh, le formatage a mangé les espaces (et le commentaire n'est plus modifiable)
NdM: commentaires édités pour la coloration syntaxique bash
[^] # Re: développement de variable
Posté par BAud (site web personnel) . Évalué à 4 (+2/-0). Dernière modification le 10 novembre 2025 à 13:12.
oui ça fonctionne le formatage Markdown avec ```bash histoire de rajouter la coloration syntaxique du code, l'utilisation des 4 espaces en début de ligne est généralement buggué pour moi :/
Merci gUI< _o/
[^] # coloration code ici
Posté par Gil Cot ✔ (site web personnel, Mastodon) . Évalué à 5 (+3/-0).
J’en profite pour signaler l’existence de la coloration syntaxique diff, vu que le journal le demandait :
Ce n’est pas lié à markdown et cela donne :
“It is seldom that liberty of any kind is lost all at once.” ― David Hume
[^] # Re: coloration code ici
Posté par Jul (site web personnel) . Évalué à 2 (+1/-0).
ah tout de suite, c'est plus classe.
Kudo aux admins.
[^] # Re: développement de variable
Posté par Jul (site web personnel) . Évalué à 3 (+2/-0).
merci, je vais voir si entre les fonctions inutiles j'ai pas oublié de "" une variable.
N'empêche que j'en apprends tous les jours, même en contournant le problème comme un … ostrogoth.
J'ai codé ça entre 2 sorties de mes femmes et j'ai peut être manqué un peu d'attention.
Ça fait du sens cette pratique de toujours double quotté les vars que je fais mécaniquement sans me souvenir pourquoi :D
ben vi, les bases. Faut les réviser souvent.
[^] # Re: développement de variable
Posté par abriotde (site web personnel, Mastodon) . Évalué à 3 (+2/-0). Dernière modification le 11 novembre 2025 à 16:54.
Ou utiliser un langage moins…, enfin plus…
Pourquoi l'as tu écris en Bash au lieu de Python ou d'un autre plus simple? Peut-être pour le fun. Parce que sinon, techniquement, pour moi, Bash n'a pas d'intérêt pour écrire un programme… Sauf si c'est simple ou (Genre lancer des commandes) ou qu'il faut que ça marche partout sans compilation en déposant.
Sous licence Creative common. Lisez, copiez, modifiez faites en ce que vous voulez.
[^] # Re: développement de variable
Posté par Jul (site web personnel) . Évalué à 4 (+3/-0).
C'est qu'en milieu pro, je me suis aperçu que sur linux/windows, dès que j'ai git installé, j'ai forcément, git, bash, perl, cut …
Et c'est un peu devenu ma stack standard de devops…
Je tente parfois la portabilité linux/windows pour le fun.
[^] # Re: développement de variable
Posté par abriotde (site web personnel, Mastodon) . Évalué à 2 (+1/-0).
Perl est beaucoup mieux que Bash pour un soft un peu sophistiqué, je trouve.
Et je doute qu'il n'y ait pas Python, même sur Windows (S'il y a langage multi-os c'est bien lui - en non compilé). Alors que Bash, sous Windows? Sous Windows c'est PowerShell à moins d'être en WSL (i.e. Ubuntu). Je n'ai jamais vu Bash & Cie sous Windows or Cygwin. Bon je l'admet, cela fait un baille que je ne touche plus trop à Windows… ou alors de manière basique (Genre en PC de travail en entreprise sur lequel on ne touche pas) et encore, cela fait plus de 2,5 ans.
Sous licence Creative common. Lisez, copiez, modifiez faites en ce que vous voulez.
[^] # Re: développement de variable
Posté par Jul (site web personnel) . Évalué à 3 (+2/-0).
Alors, je crois pas avoir tout bien compris, mais il me semble qu'en fait git for windows c'est comme un environnement MINGW/MSYS
Ce qui en fait un mini cygwin en usage avec juste quelques logiciels livrés par défault. Peut être même un python en plus du perl et d'un certains nombres de GNU/Utils nécessaires à git.
[^] # Re: développement de variable
Posté par Gil Cot ✔ (site web personnel, Mastodon) . Évalué à 4 (+2/-0).
Non, il n’y a justement pas de Python (qu’il faut installer séparément) mais bien BASh, PERL et TCL dans git-bash comme on l’appelle
→ https://git-scm.com/install/windows
→ https://gitforwindows.org/
“It is seldom that liberty of any kind is lost all at once.” ― David Hume
[^] # Re: développement de variable
Posté par Jul (site web personnel) . Évalué à 2 (+1/-0).
https://github.com/git-for-windows/git/releases/tag/v2.51.2.windows.1
On y trouve les gnu core utils (users, tr, sed, awk, who, chroot …)
tcl, perl, vim, vimdiff, less, curl …
stfp, ssh, ssh-agent, tdbbuf, cygpath, mount …
Bref, moult outils qui font que l'on se sent comme sur un linux installé avec les outils de base donc git for windows est un plutôt bon environnement de dev à la linux sous windows sans le bloat d'un WSL ou d'une hypervm quand on privilégie la ligne de commande et qui se marrie très bien avec l'usage de scoop pour installer les paquets manquants (genre pandoc).
# utilisation en framework bash
Posté par Jul (site web personnel) . Évalué à 1 (+0/-0).
Peut s'utiliser en librairie shell comme suit:
ensuite :
Ce qui donne :
donnant :
Maintenant il serait bien que je m'y colle sérieusement et positionne le return pour que ces fonctions retournent un code de réussite/erreurs
Envoyer un commentaire
Suivre le flux des commentaires
Note : les commentaires appartiennent à celles et ceux qui les ont postés. Nous n’en sommes pas responsables.