#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.
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
… 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
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
Hors 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.
Hors 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à.
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
Ouais mais du coup c'est un très bel exemple pour voir PIPESTATUS.
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
@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
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