Bonjour,
J’ai installé le paquet rc
il y a un mois Voici mes premières impressions au sujet de ce shell
Tout d’abord, quand on lance rc
en interactif, on arrive sur une invite de commande on ne peut plus minimale : un simple caractère ‹ ; › Ce simple’;’
en début de ligne facilite le copier coller d’une ligne de commande puisque le shell l’interprète comme la fin d’une commande précédente vide.
La version empaquetée par Debian incorpore la libreadline ce qui fait qu’on bénéficie d’un historique des commandes passées accessible via FlecheHaut comme dans bash De ce point de vue, dash qui est le shell système par défaut de Debian est au standard POSIX mais pratiquement inutilisable en interactif.
variables littérales (simples chaînes de caractères )
# assination var = 'la chaîne littérale'
qdc = 'n''importe quoi'
# on peut mettre des espaces entre le nom de la variable et sa valeur
# Si on veut insérer une apostrophe dans la chaîne littérale on double ''
# autre exemple
mere_denis = 'C''est bien vrai ! (comme le disait la mère Denis)'
# on n'est pas obligé de coller le nom de la variable tout à gauche
Comme avec un shell POSIX, on peut écrire une commande qui retourne vrai suivie de " && echo oui "
true ne sert à rien && echo $mere_denis
C'est bien vrai ! (comme le disait la mère Denis)
remarquez qu’il n’y a pas besoin de mettre des " pour entourer la variable
De plus quand on tape $mer pour le début de la variable voulue on peut appuyer sur Tab pour avoir le mot complet (comme en bash )
# si on tape "$var" on obtient le contenu de var entouré des uillemets "
; echo "$mere_denis"
"C'est bien vrai ! (comme le disait la mère Denis)"
; false is true || echo $qdc
n'importe quoi
Si quelqu’un trouve un cas d’utilisation des commandes false et true qu’il me fasse signe, je suis preneur.
la commande interne (builtin) whatis
rc est minimaliste, il intègre une commande interne qui permet savoir comment est interprété un mot
pour savoir si on a des commandes internes whatis -b nom …
; whatis -b whatis builtin echo true
builtin whatis
builtin builtin
builtin echo
true not found
Pour connaître les contenus de variables whatis -v var …
; whatis -v qdc mere_denis PATH false
qdc='n''importe quoi'
mere_denis='C''est bien vrai ! (comme le disait la mère Denis)'
PATH=/home/fp2/bin:/usr/local/bin:/usr/bin:/bin:/usr/games:/home/fp2/bin
false not found
pour explorer les chemins (path) whatis -p
; whatis -p /usr/bin/who* /usr/bin/tru* /bin/fals*
/usr/bin/who
/usr/bin/who-permits-upload
/usr/bin/who-uploads
/usr/bin/whoami
/usr/bin/whodepends
/usr/bin/whois
/usr/bin/truncate
/usr/bin/trust
/bin/false
simple et de bon goût on vient de trouver d’où sort false
si on ne met pas d’option -f/-p/-v/-b on a un succedane de which ou command -v
whattis false ls true echo
/bin/false
/bin/ls
/bin/true
builtin echo
Remarque l’option -f c’est pour les fonctions
Si vous utilisez l’option -v sans mettre de noms de variables toutes les variables seront listées et la sortie peut être longue :
; whatis -v DISPLAY TERM
DISPLAY=:0.0
TERM=tmux-256color
;
; whatis -v | fgrep XDG
XDG_SESSION_CLASS=user
XDG_SEAT=seat0
XDG_SESSION_ID=5
XDG_CONFIG_DIRS=/etc/xdg
XDG_RUNTIME_DIR=/run/user/1000
XDG_SESSION_TYPE=x11
XDG_SESSION_DESKTOP=xfce
XDG_DATA_DIRS=/usr/share/xfce4:/usr/local/share/:/usr/share/:/usr/share
XDG_SESSION_PATH=/org/freedesktop/DisplayManager/Session0
XDG_MENU_PREFIX=xfce-
XDG_SEAT_PATH=/org/freedesktop/DisplayManager/Seat0
XDG_VTNR=7
XDG_CURRENT_DESKTOP=XFCE
XDG_GREETER_DATA_DIR=/var/lib/lightdm/data/fp2
Exemple en tapant $P[Tab]
; echo $P
PATH PRINTER PWD
rapide comparaison des shells
On s’intéresse à la place prise en mémoire et sur disque.
; readlink -f /bin/rc
/usr/bin/rc.byron
; ls -lApst /usr/bin/rc.byron /bin/bash /bin/dash
1208 -rwxr-xr-x 1 root root 1234376 27 mars 2022 /bin/bash
108 -rwxr-xr-x 1 root root 110128 29 mars 2021 /usr/bin/rc.byron
124 -rwxr-xr-x 1 root root 125560 10 déc. 2020 /bin/dash
; size /usr/bin/rc.byron /bin/bash /bin/dash
text data bss dec hex filename
100602 3452 6688 110742 1b096 /usr/bin/rc.byron
1180850 47732 45112 1273694 136f5e /bin/bash
110643 4856 11568 127067 1f05b /bin/dash
Conclusion : le shell rc combine une approche minimaliste une syntaxe très régulière et une sémantique sans surprise; ce qui en fait un outil très agréable à utiliser. On peut enfin envisager de programmer en shell (non POSIX) sans se poser des questions du genre
- pour gérer la line de commande que faut-il utiliser : $* « $* » $@ ou « $@ » ?
- Est-ce qu’il y a une différence entre ${var:-} et « ${var-} »
- quand est-ce que ${var+x} ne retourne pas ‹ x › ?
- Que donne la syntaxe « ${var:-f}iable » lorsqu’on remplace
var
par2
? - Comment obtenir le code de retour des commandes d’un pipeline ?
- Peut-on obtenir le code de retour d’une commande dont on capture la sortie par $(cde args)
- pour capturer la sortie d’une commande $(cde ars …) comment positionner IFS et où mettre les " ?
- Comment savoir si $var commence ou finit par un blanc ’ ’ ou une tabulation ??
- Comment savoir si une variable contient un ou plusieurs caractères « chelou » du enre ?
- sed -e ‹ s/^\t//g › va-t-il supprimer un caractère tabulation en début de ligne ou bien \ et t ?
- etc …
Les réponses à ce genre de questions feront l’objet de prochains messages. J’invite les personnes intéressées à installer le paquet rc
et à commencer par
null = '' # null string
nil = () # vide rien nada zilch
whatis -v null nil PATH path IFS ifs zobi nil tab nl
Cordialement,
Regards,
Mit freundlichen Grüßen,
مع تحياتي الخالصة
F. Petitjean
Ingénieur civil du Génie Maritime. à la retraite
« On ne perd pas son temps en aiguisant ses outils. »
Proverbe français
« Moi, lorsque je n’ai rien à dire, je veux qu’on le sache. » (R. Devos)