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 - <fe...@f-hauri.ch> - http://www.f-hauri.ch _______________________________________________ gull mailing list gull@forum.linux-gull.ch https://forum.linux-gull.ch/mailman/listinfo/gull