#26 Le 24/08/2020, à 22:38
- jlfh0816
Re : lanceur pour retirer sans risque une clé usb
@kamaris
Merci beaucoup de ta patience pour toutes ces explications !
Il faut passer à lsblk un nom de périphérique valide.
Pour voir tes noms de périphériques, regarde le retour de lsblk dans le terminal (première colonne).
C'est tout bon maintenant en précisant /dev/sdb dans mon petit script :
model=$(lsblk -no model /dev/sdb)
echo $model
notify-send "summary" -t 10000 "$model"
- l'echo me retourne bien Cruzer Blade (c'est le modèle de ma clef usb) :
jlfh0816 @ Voyager1804 ~/.scripts
└─ $ ▶ ./essai.sh
Cruzer Blade
- et le message de notification m'affiche bien également Cruzer Blade :
Ton corps de message contient littéralement $model au lieu de sa valeur, car tu as utilisé des guillemets simples au lieu des doubles
Oui, tu as tout à fait raison, j'aurai dû mieux vérifier ma syntaxe.
En fait, cette histoire de guillemets pour le corps du message n'est pas claire car j'ai remarqué (à plusieurs reprises) que, lorsqu'il n'y a pas variable, il lui arrive de ne s'afficher que s'il est entouré de guillemets simples. Par contre, effectivement, lorsque ce corps de message doit afficher la valeur d'une variable, il nécessite des guillemets doubles.
Difficile à comprendre ...
Dans mon script, le $2 (second argument) de la fonction power_off() correspond à $last_device dans le corps le script, car j'appelle la fonction par
power_off "$1" "$last_device"
où $1 est le premier argument du script (l'option éventuelle -v), également passé en premier argument à power_off().
Alors là, pour le béotien que je suis, j'avoue ne pas avoir tout compris car si j'ai bien repéré $1 dans ton script ... il apparaît après l'utilisation de $2 (c'est normal ?).
Bon, j'ai largement de quoi potasser les manuels de bash script !!!
Encore merci de ta patience kamaris ... et à toi aussi MicP !
edit: je viens de comprendre pour $2 avant $1 : en fait, c'est dans la déclaration de la fonction que j'avais cette impression car, dans le fil du script ensuite, $1 est bien avant $2.... désolé de ne pas avoir saisi tout de suite !
Dernière modification par jlfh0816 (Le 24/08/2020, à 22:50)
Xubuntu - Voyager 18.04 et 22.04
Hors ligne
#27 Le 25/08/2020, à 07:45
- kamaris
Re : lanceur pour retirer sans risque une clé usb
En fait, cette histoire de guillemets pour le corps du message n'est pas claire car j'ai remarqué (à plusieurs reprises) que, lorsqu'il n'y a pas variable, il lui arrive de ne s'afficher que s'il est entouré de guillemets simples. Par contre, effectivement, lorsque ce corps de message doit afficher la valeur d'une variable, il nécessite des guillemets doubles.
Difficile à comprendre ...
En fait, quand on écrit une ligne de commande, il faut toujours penser qu'il y a deux étapes :
- l'interprétation de cette ligne de commande par le shell ;
- l'interprétation des arguments de cette ligne de commande par la commande concernée (ici notify-send).
Ce que reçoit la commande invoquée n'est donc pas ce qui est écrit, mais ce qui sort de l'interprétation de ce qui est écrit par le shell.
Voir la section « Simple Command Expansion » de man bash pour un exposé synthétique de cette interprétation.
Concernant les guillemets, le shell les retire (quote removal) en développant ou pas les variables qu'ils contiennent selon qu'il s'agit de guillemets doubles ou simples.
Un bon moyen de voir à quoi ressemble la commande effectivement lancée, est d'utiliser set -x (cf. help set).
edit: je viens de comprendre pour $2 avant $1 : en fait, c'est dans la déclaration de la fonction que j'avais cette impression car, dans le fil du script ensuite, $1 est bien avant $2.... désolé de ne pas avoir saisi tout de suite !
Rq : ces $1 et $2 sont à ne pas confondre avec les $1 et $2 dans
done < <(lsblk -Ppno kname,pkname,hotplug,mountpoint \
| awk '{for (i=1;i<=NF;i++) gsub("[^\"]+=\"|\"","",$i)}
(+$3 || p) && $4{print $1" "$2; p=0; next}
+$3 && $2{p=1; next} {p=0}')
car là, ça désigne des champs dans awk, ce qui est encore autre chose !
Hors ligne
#28 Le 25/08/2020, à 11:01
- jlfh0816
Re : lanceur pour retirer sans risque une clé usb
@kamaris
Que dire devant tant de pédagogie, de patience et de bienveillance .... si ce n'est un grand merci !
Bon, dans la pratique, je prendrai quand même deux comprimés d'aspirine avant de me plonger dans les méandres des manuels de bash/shell : on n'est jamais assez prudent !
Et de toute façon, il faudra que je m'en trouve en français si possible, ce sera nettement plus constructif et agréable pour tenter de saisir toutes ces subtilités de syntaxe...
Xubuntu - Voyager 18.04 et 22.04
Hors ligne
#29 Le 25/08/2020, à 15:29
- kamaris
Re : lanceur pour retirer sans risque une clé usb
De rien
Un lien pour les pages de man en français : https://man.developpez.com/manpage-complet/
Et notamment : https://man.developpez.com/man1/bash/
Hors ligne
#30 Le 25/08/2020, à 22:07
- jlfh0816
Re : lanceur pour retirer sans risque une clé usb
@kamaris
merci pour les liens en français !
Dernière modification par jlfh0816 (Le 25/08/2020, à 22:09)
Xubuntu - Voyager 18.04 et 22.04
Hors ligne
#31 Le 07/10/2024, à 23:44
- coma29
Re : lanceur pour retirer sans risque une clé usb
Bonjour
Débutant, je cherchais à créer un lanceur sur le tableau de bord pour démonter en un clic et sans risque mes différents USB.
Un grand merci à Kamaris
Hors ligne
#32 Le 08/10/2024, à 06:50
- kamaris
Re : lanceur pour retirer sans risque une clé usb
De rien, de rien. Content de voir que ce petit travail est toujours utile, ça commence à dater un peu maintenant
Hors ligne