[gull] Truc et astuces: bash

felix felix at f-hauri.ch
Thu Feb 18 13:57:57 CET 2021


Bonjour.

On Wed, Feb 17, 2021 at 10:14:59PM +0100, Arnaud wrote:
> Bonjour,
> 
> C'est un lien vers une doc qui me sert régulièrement: 
> https://mywiki.wooledge.org/Quotes
> 
> Des fois, quand je la lis et que je relis un script qui m'a pris du 
> temps, je me rends compte que j'en avais pas appliqué certains, donc 
> je me dis qu'elle peut servir à d'autres.
Très juste: dans ce script, j'adresse des hostnames ou IPs, voire PIDs, 
nombres entier, etc... je n'aurrai donc aucun caractère sujet à soucis,
donc je n'ai pas mis de guillemets.

... mais ré-utiliser ces méthodes pour d'autres applications pourrait
nécessiter de faire attention à ce genre de détails.

> Un utilitaire qui peut servir aussi dont je me sers souvent: shellcheck 
> Ca permet de revoir rapidement la syntaxe utilisé dans un script, mais 
> j'ai remarqué qu'il ne fallait pas toujours suivre aveuglement ce 
> qu'il retourne.
C'est le moins que l'on puisse dire:

S'il est peut-être vrai que mon script n'est pas très academique, la
plupart des ``erreurs'' marquées par shellcheck sont conscientes et
donc volontaires, soit par absence de nécessité, soit par effet de
bord recherché.

Par exemple:
 -  la première erreur citée: ``getopts specified -d, but it's not handled''
    c'est parce que je **veux** ignorer `-d' quand je refais la ligne de
    commande pour relancer le mode debug, depuis le script lui-même..
    ( Si `d' ne figure pas dans l'argument de getopts, bash fait une erreur...
      J'aurrais pu ajouter `d ) ;; * ) ;;` mais n'ai pas estimé la chose utile)
 -  le seconde: ``Quote to prevent word splitting'' la variable opt ne peut
    contenir qu'une seule lettre, parmi c, d, i ou p. Je ne vois pas pourquoi
    de **dois** quoter ça!
 -  plus bas: ``read without -r will mangle backslashes''.. Je lis une sortie
    de la commande ``ping''. Il n'y aurra pas de backslashes!
 -  et alors quand je veux créer une array sur la base d'espaces:
    In multiping.sh line 208:
        ar=(${!fds[@]})
            ^-- SC2206: Quote to prevent word splitting, or split robustly with mapfile or read -a.

Ok, 71 notes sur 260 lignes, on peut faire mieux (34 lignes 34 remarques):
  https://f-hauri.ch/vrac/mydf.sh.txt
( pourtant j'ai mis des guillemets au variables quand nécessaire... ;)

En fait, shellsheck ne comprend ni la teneur des variables ni la finalité du
script...

En particulier le message: ``read without -r will mangle backslashes'' est
vrai, mais s'il s'agissait d'un réel problème, le flag `-r' n'existerait pas
et serait l'attitude par défaut (y'aurrai un flag pour gérer les backslashes?)
(...et quand shellcheck me dit de mettre un `-r` avec `read -t 0` qui ne lit
    rien mais retourne un status RC=0 si ``data ready''... :-/ )

Pour le fun, j'ai fait un script ``compatible shellcheck''... C'était
laborieux et j'ai dû faire des trucs inutiles, mais shellcheck ne fait
plus de remarques. Bref, je ne suis pas convaincu.
  https://f-hauri.ch/vrac/reshellcheck.sh.txt

Pour ma part, j'utilise emacs qui fait une bonne partie du travail pour ce
qui est de la syntaxe (je n'utilise(ais) pas elpa-flycheck, je l'ai testé
pour faire mon dernier script, simpa, mais bon...).

Puis de cas en cas, je crée mes propres méthodes de debugging...

-- 
 Félix Hauri  -  <felix at f-hauri.ch>  -  http://www.f-hauri.ch


More information about the gull mailing list