Oui, là pour moi c'est au moins compréhensible : on voit où ça démarre, quels principaux chemins ça peut suivre, et où ça se termine.
Pour les
return dans le
case … esac, je ne les avais pas mis, car ils sont implicites : si on atteint la dernière ligne (exécutée) d'une fonction, elle renvoie le code retour de la dernière commande qu'elle a exécutée en interne.
Tu peux très bien les mettre si tu trouves ça plus clair et explicite, mais en général, on ne les met que si on veut forcer la fonction à quitter prématurément, et / ou si on veut forcer un code retour autre que celui par défaut.
D'ailleurs, une remarque concernant l'utilisation de
trap : il y a bien plus simple en l'occurrence que ma première réaction, consistant à définir la fonction mère avec des parenthèses pour en faire un sous-processus tuable.
Il suffit justement de mettre un
return dans le
trap, pour forcer la fonction mère à se terminer, une fois que la fonction appelée par
trap a elle-même fini son travail :
trap 'commandeInterrompue; return 1' 2
Et on peut ainsi virer le
pkill -P $$ de
commandeInterrompue(), qui ne sert plus à rien, et remettre
commande() avec une définition entre crochets :
commande() {
…
}
Pour les fonctions d'affichage, je pense que leur utilisation est correcte comme ça : on s'en sert où il faut qu'on s'en serve (et ça ne se limite pas à la fonction de redirection), et on se sert parfois d'une seule, parfois de deux, parfois de trois, donc on ne peut pas non plus les regrouper en une ou deux.
Maintenant, c'est toi qui sais quel résultat ça doit donner au final, donc peut-être que je ne vois pas certaines simplifications possibles…
Pour répondre un peu plus à ta question sur les bonnes pratiques : une chose qui pourrait être faite, pour aller plus loin dans la fonctionnalisation de tes fonctions, c'est d'éviter de se servir de variables globales, pour passer plutôt des paramètres aux fonctions, et leur faire renvoyer quelque chose :
fonction() {
…
echo 'quelque chose'
}
var='valeur initiale'
…
var=$(fonction "$param1" … "$paramN")
au lieu de
fonction() {
…
var_globale='quelque chose'
…
}
var_globale='valeur initiale'
…
fonction
Mais c'est vrai qu'ici ça ne s'y prête que moyennement : tu as peu de variables, et tes fonctions font très peu de transformations de données en interne.
Donc c'est peut-être pas la peine de vouloir à tout prix appliquer cette règle.
Enfin, pour
xinput, je ne sais pas : je ne connais pas, et j'ai essayé les commandes du script dans un terminal ou un script chez moi, et ça ne me désactive rien du tout.
Je pense donc que si tu as plus de questions là-dessus, tu pourrais effectivement ouvrir un nouveau sujet, car celui-là est déjà bien rempli 🙂