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 07/11/2021, à 08:24

ar barzh paour

[Resolu] résultat de commande non attendu

hello bonjour
dans un script je bute sur ça

 cat "$fich_grub" |grep ^menuentry \
     |grep -v "dépannage" |grep -v "recovery" |grep -v "memtest" \
     | awk -F"--class" '{printf("    %s\n",$1)}' >/tmp/essai.txt
cat: /boot/grub/grub.cfg: Permission non accordée
code=$?
echo $code
0

j'ai essayé plusieurs choses , avec () ou {}  ou en mettant sur la même ligne
sans succès

cat "$fich_grub" |grep ^menuentry      |grep -v "dépannage" |grep -v "recovery" |grep -v "memtest"      | awk -F"--class" '{printf("    %s\n",$1)}' ; code=$?
cat: /boot/grub/grub.cfg: Permission non accordée
echo $?
0
 

en fait j'aurais attendu un code égale à 1
comme ci-dessous mais les pipes influent sur le résultat
(réellement  je fais en plus cat "$fich_grub"..... > "$fichier")


cat "$fich_grub"
cat: /boot/grub/grub.cfg: Permission non accordée
code=$?
echo $code
1

Dernière modification par ar barzh paour (Le 07/11/2021, à 16:30)


PC          : B760M DS3H DDR4,  12th Gen Intel(R) Core(TM) i3-12100, RAM DDR4 8GiB -2400 Ubuntu 20.04, 22.04, 24.04 (en test )
Portable1 : ThinkPad P50 I7-6820HQ, 16G0 Ram Ubuntu 22.04 Ubuntu 24.04 , W10-PRO( en voyage )
Portable2 : T5750  @ 2.00GHz RAM 1GiB DDR2 667 Mhz Ubuntu 20.04 ( batterie HS )
stourm a ran war bep tachenn (Angela Duval) ( Je combats sur tous les fronts )

Hors ligne

#2 Le 07/11/2021, à 08:43

FrancisFDZ

Re : [Resolu] résultat de commande non attendu

Bonjour,

cat "$fich_grub"
cat: /boot/grub/grub.cfg: Permission non accordée
code=$?
echo $code
1

Il semble bien qu'il s'agisse d'un problème de permissions => . lancer le script en sudo ? (mais je pressens que de serait une "FBI" (fausse bonne idée))

Dernière modification par FrancisFDZ (Le 07/11/2021, à 08:44)


-- On peut avoir des raisons de se plaindre et n'avoir pas raison de se plaindre --
[Victor Hugo]

Hors ligne

#3 Le 07/11/2021, à 08:45

pingouinux

Re : [Resolu] résultat de commande non attendu

Bonjour,
C'est normal, mais tu peux y remédier.

man bash -> SHELL GRAMMAR -> Pipelines a écrit :

       The  return  status  of  a  pipeline  is  the  exit status of the last command, unless the
       pipefail option is enabled.
  If pipefail is enabled, the pipeline's return status  is  the
       value  of the last (rightmost) command to exit with a non-zero status, or zero if all com‐
       mands exit successfully.  If the reserved word !  precedes a pipeline, the exit status  of
       that  pipeline  is  the logical negation of the exit status as described above.  The shell
       waits for all commands in the pipeline to terminate before returning a value.

Hors ligne

#4 Le 07/11/2021, à 08:58

MicP

Re : [Resolu] résultat de commande non attendu

Bonjour

Pour pouvoir récupérer les codes d'erreur retournés par chacune des commandes d'une série de pipes
il y a la variable nommée PIPESTATUS

man bash a écrit :
…
       PIPESTATUS
              Une variable de type tableau (consultez Tableaux ci-dessous) contenant une liste des états finaux des processus exécutés dans le pipeline exécuté le plus récemment au premier plan (qui peut éventuellement contenir une seule commande).
…

Pour montrer comment ça fonctionne, je reprends ta ligne de commandes
mais je provoque intentionnellement une erreur en n'affectant aucune valeur à la variable fich_grub

michel@debbull:~$ fich_grub=
michel@debbull:~$ cat "$fich_grub" | grep ^menuentry | grep -v "dépannage" | grep -v "recovery" | grep -v "memtest" | awk -F"--class" '{printf("    %s\n",$1)}'
cat: '': Aucun fichier ou dossier de ce type
michel@debbull:~$ echo ${PIPESTATUS[@]}
1 1 1 1 1 0
michel@debbull:~$ 

Maintenant, je donne une valeur à la variable fich_grub
mais pour provoquer une erreur dans la deuxième commande de la série de pipes
je donne un motif de recherche qui n'existe pas dans le fichier :

michel@debbull:~$ fich_grub=/boot/grub/grub.cfg
michel@debbull:~$ cat "$fich_grub" | grep ^XXXmenuentry | grep -v "dépannage" | grep -v "recovery" | grep -v "memtest" | awk -F"--class" '{printf("    %s\n",$1)}'
michel@debbull:~$ echo ${PIPESTATUS[@]}
0 1 1 1 1 0
michel@debbull:~$ 

Dernière modification par MicP (Le 07/11/2021, à 09:06)

Hors ligne

#5 Le 07/11/2021, à 09:00

FrancisFDZ

Re : [Resolu] résultat de commande non attendu

Traduction google de la réponse de pingouinux

google translate a écrit :

L'état de retour d'un pipeline est l'état de sortie de la dernière commande, à moins que l'option pipefail ne soit activée.
Si pipefail est activé, l'état de retour du pipeline est la valeur de la dernière commande (la plus à droite) à quitter avec un état différent de zéro, ou zéro si toutes les commandes se terminent avec succès.
Si le mot réservé ! précède un pipeline, l'état de sortie de ce pipeline est la négation logique de l'état de sortie comme décrit ci-dessus.
La coquilleLe shell attend que toutes les commandes du pipeline se terminent avant de renvoyer une valeur.

(avec quelques petites corrections)

Dernière modification par FrancisFDZ (Le 07/11/2021, à 09:04)


-- On peut avoir des raisons de se plaindre et n'avoir pas raison de se plaindre --
[Victor Hugo]

Hors ligne

#6 Le 07/11/2021, à 09:54

nany

Re : [Resolu] résultat de commande non attendu

Bonjour,



De toute façon les pipes sont inutiles ici.
En effet, il y a d’abord un Useless Use Of Cat donc cat est inutile.
Ensuite, puisque awk est utilisé, on peut se passer allègrement de tous ces grep successifs.
Donc :

awk -F"--class" '/^menuentry/ && ! /dépannage|recovery|memtest/{printf("    %s\n",$1)}' "$fich_grub"

 

Pour le problème de permission, il n’existe pas en 20.04 mais existe bel et bien en 21.10 et 22.04 car les droits ont changé.
En effet, dans 20.04 :

~$ ls -l /boot/grub/grub.cfg | awk '{print $1,$3,$4}'
-r--r--r-- root root

Alors qu’en 21.10 et 22.04 :

~$ ls -l /boot/grub/grub.cfg | awk '{print $1,$3,$4}'
-rw------- root root

En ligne

#7 Le 07/11/2021, à 10:44

FrancisFDZ

Re : [Resolu] résultat de commande non attendu

Merci nany, ça répond parfaitement à mon intervention en #2, et effectivement ma proposition de passer par sudo n'est pas adaptée.


-- On peut avoir des raisons de se plaindre et n'avoir pas raison de se plaindre --
[Victor Hugo]

Hors ligne

#8 Le 07/11/2021, à 10:47

nany

Re : [Resolu] résultat de commande non attendu

Bah cette commande doit être utilisée avec sudo dans Impish et Jammy.
Reste à savoir si le script en entier peut  l’être.

En ligne

#9 Le 07/11/2021, à 11:45

Hizoka

Re : [Resolu] résultat de commande non attendu

@MicP
merci pour la variable PIPESTATUS que je ne connaissais pas.


KDE Neon 64bits
Tous mes softs (MKVExtractorQt, HizoSelect, HizoProgress, Qtesseract, Keneric, Services menus...) sont sur github

Hors ligne

#10 Le 07/11/2021, à 12:42

Tawal

Re : [Resolu] résultat de commande non attendu

Hello,

Oui elle est pratique la variable PIPESTATUS, mais elle se réinitialise a chaque commande passée, même sans pipe :

$ fich_grub=
$ cat "$fich_grub" | grep ^menuentry | grep -v "dépannage" | grep -v "recovery" | grep -v "memtest" | awk -F"--class" '{printf("    %s\n",$1)}'
cat: '': Aucun fichier ou dossier de ce type
$ echo ${PIPESTATUS[@]}
1 1 1 1 1 0
$ echo ${PIPESTATUS[@]}
0
$

Le savoir n'a d’intérêt que si on le transmet.
Useless Use of Cat Award
Filenames and Pathnames in Shell: How to do it Correctly
À chaque problème sa solution, à chaque solution son moyen, si pas de moyen, toujours le problème !

Hors ligne

#11 Le 07/11/2021, à 13:07

Watael

Re : [Resolu] résultat de commande non attendu

dans un script je bute sur ça

c'est toi qui va te faire buter !

cat | grep | grep | grep | grep | awk 

tu cherches les ennuis, là.

lol

Dernière modification par Watael (Le 07/11/2021, à 13:07)


Connected \o/
Welcome to sHell. · eval is evil.

Hors ligne

#12 Le 07/11/2021, à 13:26

Tawal

Re : [Resolu] résultat de commande non attendu

lol

Ouais mais du coup c'est un très bel exemple pour voir PIPESTATUS. wink


Le savoir n'a d’intérêt que si on le transmet.
Useless Use of Cat Award
Filenames and Pathnames in Shell: How to do it Correctly
À chaque problème sa solution, à chaque solution son moyen, si pas de moyen, toujours le problème !

Hors ligne

#13 Le 07/11/2021, à 13:34

Watael

Re : [Resolu] résultat de commande non attendu

ah oui, mais un tellement pire exemple de pipe.


Connected \o/
Welcome to sHell. · eval is evil.

Hors ligne

#14 Le 07/11/2021, à 16:29

ar barzh paour

Re : [Resolu] résultat de commande non attendu

hello re-bonjour à tous et merci pour vos réponses

@FrancisFDZ
je ne veux pas utiliser sudo , je veux simplement récupérer le code d'erreur

sinon
cat | grep |grep |awk .... c'est un vieux script
oui pas terrible quand on a la commande sous les yeux , mais
c'est du à un manque de connaissance des commandes , à un manque de connaissance de l'efficacité des commandes ,et aussi à l'historique du développement
je commence par un cat , je m'aperçois que c'est trop volumineux .. je restreins à un terme puis à un autre , puis je trouve plus pratique de ne conserver que quelques champs d'où awk


et effectivement j'essaie de l'adapter le script à 22.04

@nany

awk -F"--class" '/^menuentry/ && ! /dépannage|recovery|memtest/{printf("    %s\n",$1)}' "$fich_grub"

est certainement la meilleure commande dans ce cas
fich_grub=/boot/grub/grub.cfg

awk -F"--class" '/^menuentry/ && ! /dépannage|recovery|memtest/{printf("    %s\n",$1)}' "$fich_grub"
awk: cannot open /boot/grub/grub.cfg (Permission denied)
echo ${PIPESTATUS[@]}
2

une solution serait donc

2>/dev/null awk -F"--class" '/^menuentry/ && ! /dépannage|recovery|memtest/{printf("    %s\n",$1)}' "$fich_grub">/tmp/essai.txt
code=$?
echo $code
2

PC          : B760M DS3H DDR4,  12th Gen Intel(R) Core(TM) i3-12100, RAM DDR4 8GiB -2400 Ubuntu 20.04, 22.04, 24.04 (en test )
Portable1 : ThinkPad P50 I7-6820HQ, 16G0 Ram Ubuntu 22.04 Ubuntu 24.04 , W10-PRO( en voyage )
Portable2 : T5750  @ 2.00GHz RAM 1GiB DDR2 667 Mhz Ubuntu 20.04 ( batterie HS )
stourm a ran war bep tachenn (Angela Duval) ( Je combats sur tous les fronts )

Hors ligne

#15 Le 07/11/2021, à 16:40

Watael

Re : [Resolu] résultat de commande non attendu

test -r "$fichier" && awk ... || >&2 echo "err: fichier non lisible"

Connected \o/
Welcome to sHell. · eval is evil.

Hors ligne

#16 Le 08/11/2021, à 08:03

ar barzh paour

Re : [Resolu] résultat de commande non attendu

Ah j'ai oublié
comme Hizoka en #9
@MicP
merci pour la variable PIPESTATUS que je ne connaissais pas.
je note ça dans mon aide-mémoire

@nany
En effet, il y a d’abord un Useless Use Of Cat donc cat est inutile.

2ème fois que je tombe sur  cette expression "Useless Use Of Cat" dans le forum
je vais chercher ce que ça veut dire
.....
"Utilisation inutile de CAT"
bon ça dit bien ce que ça veut dire .....

Dernière modification par ar barzh paour (Le 08/11/2021, à 08:20)


PC          : B760M DS3H DDR4,  12th Gen Intel(R) Core(TM) i3-12100, RAM DDR4 8GiB -2400 Ubuntu 20.04, 22.04, 24.04 (en test )
Portable1 : ThinkPad P50 I7-6820HQ, 16G0 Ram Ubuntu 22.04 Ubuntu 24.04 , W10-PRO( en voyage )
Portable2 : T5750  @ 2.00GHz RAM 1GiB DDR2 667 Mhz Ubuntu 20.04 ( batterie HS )
stourm a ran war bep tachenn (Angela Duval) ( Je combats sur tous les fronts )

Hors ligne

#17 Le 08/11/2021, à 09:57

FrancisFDZ

Re : [Resolu] résultat de commande non attendu

ar barzh paour a écrit :

@FrancisFDZ
je ne veux pas utiliser sudo , je veux simplement récupérer le code d'erreur

Suite à l'intervention de nany en #6, j'ai signalé que ma proposition de passer par sudo n'était pas adaptée.


-- On peut avoir des raisons de se plaindre et n'avoir pas raison de se plaindre --
[Victor Hugo]

Hors ligne

#18 Le 08/11/2021, à 10:46

Tawal

Re : [Resolu] résultat de commande non attendu

@ar barzh paour : clique sur le lien Useless Use of Cat Award dans ma signature wink


Le savoir n'a d’intérêt que si on le transmet.
Useless Use of Cat Award
Filenames and Pathnames in Shell: How to do it Correctly
À chaque problème sa solution, à chaque solution son moyen, si pas de moyen, toujours le problème !

Hors ligne