Contenu | Rechercher | Menus

Annonce

Si vous avez des soucis pour rester connecté, déconnectez-vous puis reconnectez-vous depuis ce lien en cochant la case
Me connecter automatiquement lors de mes prochaines visites.

À propos de l'équipe du forum.

#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