#1 Le 27/04/2015, à 10:49
- Arbiel
[Résolu] Substitution inopérante dans "grep -e "^${variable}"
Bonjour
Dans un second script je veux tester la présence d'un volume
if [[ $(($(sudo blkid | grep -e "^${vol}:" -c))) -eq 0 ]]; then
Il apparaît que la substitution de ${vol} n'est pas faite avant que grep n'analyse le résultat de blkid, ce qui fait que celui-ci cherche une ligne vide (rien entre le début "^" et la fin "$") suivie de {vol}: qu'il n'a aucune chance de trouver.
Supprimer les ", insérer un \ devant $, définir un filtre contenant ^${vol}: ne me permettent pas de résoudre le problème.
Merci à quiconque pourra me mettre sur la voie.
Arbiel
Dernière modification par Arbiel (Le 02/05/2015, à 01:11)
Arbiel Perlacremaz
LDLC Aurore NK3S-8-S4 Ubuntu 20.04
Abandon d'azerty au profit de bépo, de google au profit de Lilo et de la messagerie électronique violable au profit de Protonmail, une messagerie chiffrée de poste de travail à poste de travail.
Hors ligne
#2 Le 27/04/2015, à 11:18
- pingouinux
Re : [Résolu] Substitution inopérante dans "grep -e "^${variable}"
Bonjour,
Je viens de tester : chez moi, en bash, la substitution a bien lieu, et le test est vérifié si le volume n'apparaît pas.
Tu peux simplifier la commande
if ! grep -q "^${vol}:" <(sudo blkid); then
Hors ligne
#3 Le 27/04/2015, à 16:28
- Arbiel
Re : [Résolu] Substitution inopérante dans "grep -e "^${variable}"
Merci pour ta réponse
À vrai dire, je revenais à l'instant sur ma demande pour indiquer ce dont je viens de m'apercevoir.
Ce n'est peut-être pas la substitution qui ne fonctionne pas.
Lorsque je lance mon script depuis un terminal, avec "bash", ou "source" ou ".", tout fonctionne normalement. Par contre, lorsqu'il est lancé par l'ordre
EXEC=bash /tmp/script
dans un lanceur, le test que j'ai mentionné en 1 ne fonctionne pas.
Après de nombreux essais pour essayer d'y voir clair, je viens de constater que c'est "sudo blkid" qui ne fonctionne pas.
Dans le lanceur j'obtiens la réponse suivante :
sudo: pas de tty présent et pas de programme askpass spécifié
Merci encore
Arbiel
Arbiel Perlacremaz
LDLC Aurore NK3S-8-S4 Ubuntu 20.04
Abandon d'azerty au profit de bépo, de google au profit de Lilo et de la messagerie électronique violable au profit de Protonmail, une messagerie chiffrée de poste de travail à poste de travail.
Hors ligne
#4 Le 27/04/2015, à 17:29
- pingouinux
Re : [Résolu] Substitution inopérante dans "grep -e "^${variable}"
Alors là je ne sais pas, désolé…
Hors ligne
#5 Le 27/04/2015, à 20:18
- Postmortem
Re : [Résolu] Substitution inopérante dans "grep -e "^${variable}"
Salut,
sudo demande un mot de passe quand on l'execute et là, ça te dit qu'il n'y a rien pour rentrer le mot de passe.
Dans ton lanceur, tu peux mettre un truc du genre EXEC=gnome-terminal -e /tmp/script ainsi tu pourras rentrer le mot de passe.
Ou tu configures sudo pour qu'il ne demande pas de mot de passe pour la commande blkid.
Il y a aussi moyen de mettre le mot de passe dans le script en utilisant l'option -S de sudo mais c'est pas très sécure !
Mot' a dit : « Un Hellfest sans Slayer, c'est comme une galette-saucisse sans saucisse ! »
Hors ligne
#6 Le 01/05/2015, à 19:30
- Arbiel
Re : [Résolu] Substitution inopérante dans "grep -e "^${variable}"
Bonsoir
Ayant modifié ma manière de procéder, j'ai voulu la mettre en œuvre avant de vous apporter à tous deux les explications complémentaires que je pense vous devoir pour vous être intéressés à mon problème.
Las de toujours devoir saisir mon mot de passe pour des commandes telles que synaptic, gparted, mount, … et profitant du fait que j'ai chiffré mon /home, j'y ai enregistré mon mot de passe dans le fichier nommé ".lathraios". Comme personne d'autre que moi n'utilise mon portable et qu'il ne démarre avec Ubuntu que lorsque j'ai préalablement branché ma clé USB dont le MBR contient grub et la phrase de déchiffrement de mon /home, je considère que je ne prends pas par là un risque important.
La méthode que j'ai initialement envisagée (qui s'est avérée beaucoup trop compliquée) consistait, en extrayant des lignes de commande d'un fichier, à créer dynamiquement le script temporaire ci-dessous :
#!/bin/bash
traitement () {
# lignes extraites du fichier
…
# fin des lignes du fichier
}
cat ~/.lathraios | sudo -S sleep 0 ;
traitement ;
La commande "cat ~/.lathraios | sudo -S sleep 0 ;" m'authentifie automatiquement avant l'exécution des commandes extraites du fichier.
Lorsque j'ai pris connaissance du message d'erreur de "sudo blkid", au point #3, j'ai tout de suite compris qu'il me suffisait d'y supprimer "sudo" pour résoudre mon problème. Et, bien sûr, tout a alors fonctionné.
Je n'ai cependant pas compris pourquoi cette commande me demandait de nouveau mon mot de passe car je n'ai pas annulé l'authentification par l'option -k ou -K de sudo entre temps.
Je crée maintenant des alias pour arriver au même résultat dans les cas les plus courants, pour lesquels il me suffit de taper le nom de la commande dans le terminal .
Les alias sont créés par le fichier ~/.bash_aliases dans lequel j'ai écrit
alias sudovS='cat ~/.lathraios | sudo -v -S &>/dev/null ;'
alias sudo='sudovS sudo'
for bin in mount blkid synaptic lvdisplay vgdisplay cryptsetup cryptdisk_start ; do
alias ${bin}='sudovS sudo '${bin} ;
done ;
J'ai également introduit de nouvelles entrées de lanceur ([Desktop Action …]) dans les lanceurs "systèmes" de la barre de lanceurs Unity en les transformant en lanceurs "personnels" pour lancer ces diverses commandes (je les ai recopiés dans mon /home pour les y modifier).
Dans un lanceur, les substitutions me semblant ne pas avoir lieu, j'ai dû écrire
[Desktop Action synaptic]
Name=Mise à jour des paquets
Exec=bash -c "cat ~/.lathraios | sudo -S synaptic &>/dev/null ;"
OnlyShowIn=Unity;
Arbiel
Arbiel Perlacremaz
LDLC Aurore NK3S-8-S4 Ubuntu 20.04
Abandon d'azerty au profit de bépo, de google au profit de Lilo et de la messagerie électronique violable au profit de Protonmail, une messagerie chiffrée de poste de travail à poste de travail.
Hors ligne