[BASH] Priorité des métacharactere (Résolu)
- Wax-Reggea
- Hankyu
- Messages : 18
- Inscription : lun. 16 déc. 2013, 18:26
[BASH] Priorité des métacharactere (Résolu)
Salut tous le monde,
J'aurai besoin de la priorité des opérateur utilisable sur un bash (surtout ';', '|', '>', '<', '>>', '<<', '<>' et les redirections des output (1&2)). Je pensais trouver cela facilement sur le net mais impossible à trouver .
Si quelqu'un arrive à trouver une liste 100% fiable cela serait top ! J'ai beau essayer de la faire à la main en essayant sur mon shell, mais je trouve des cas bizarre et ça me prend la tête.
D'après moi, j'ai trouver ça, mais comme dis plus haut, j'en suis absolument pas sur:
1: ';'
2: '<'
3: '|' et '<<'
4: '>>'
5: '>'
Et les autres, je sais pas.
Merci d'avance !
Wax-Reggea.
J'aurai besoin de la priorité des opérateur utilisable sur un bash (surtout ';', '|', '>', '<', '>>', '<<', '<>' et les redirections des output (1&2)). Je pensais trouver cela facilement sur le net mais impossible à trouver .
Si quelqu'un arrive à trouver une liste 100% fiable cela serait top ! J'ai beau essayer de la faire à la main en essayant sur mon shell, mais je trouve des cas bizarre et ça me prend la tête.
D'après moi, j'ai trouver ça, mais comme dis plus haut, j'en suis absolument pas sur:
1: ';'
2: '<'
3: '|' et '<<'
4: '>>'
5: '>'
Et les autres, je sais pas.
Merci d'avance !
Wax-Reggea.
Dernière modification par Wax-Reggea le dim. 16 févr. 2014, 19:55, modifié 2 fois.
-
- Maître du Kyudo
- Messages : 1855
- Inscription : mer. 06 janv. 2010, 13:51
- Localisation : Ried - Alsace - France
Re: [BASH] Priorité des métacharactere
Ce genre de chose : http://tldp.org/LDP/abs/html/opprecedence.html ?
Demande à google : bash operators prority....
Demande à google : bash operators prority....
La majorité des bugs se situe entre la chaise et le clavier...
Arrêtez de vous prendre la tête avec les partitions... passez au LVM
Arrêtez de vous prendre la tête avec les partitions... passez au LVM
- Wax-Reggea
- Hankyu
- Messages : 18
- Inscription : lun. 16 déc. 2013, 18:26
Re: [BASH] Priorité des métacharactere
J'avais déjà vue cette page mais les opérateurs listés ne sont pas ceux que je veux. Il me faudrait la même chose en plus complet mais j'ai pas trouvé.
-
- Maître du Kyudo
- Messages : 1855
- Inscription : mer. 06 janv. 2010, 13:51
- Localisation : Ried - Alsace - France
Re: [BASH] Priorité des métacharactere
Tu voudrais un tableau qui te synthétise tous les opérateurs, sachant que tu mélanges :
- des opérateurs arithmétiques ( +, *, >)
- des opérateurs de séquencement d'opération ( &, ; , && )
- des opérateurs de redirection (>, >&, &>)
et d'autres.
Et en plus '>' (et ce n'est pas le seul) est un opérateur qui peut être :
- un opérateur arithmétique de comparaison
- un opérateur de redirection
Je pense qu'une liste exhaustive n'existe pas. Peut-être que si tu épluches soigneusement le bash tu arriveras à en faire une.
- des opérateurs arithmétiques ( +, *, >)
- des opérateurs de séquencement d'opération ( &, ; , && )
- des opérateurs de redirection (>, >&, &>)
et d'autres.
Et en plus '>' (et ce n'est pas le seul) est un opérateur qui peut être :
- un opérateur arithmétique de comparaison
- un opérateur de redirection
Je pense qu'une liste exhaustive n'existe pas. Peut-être que si tu épluches soigneusement le bash tu arriveras à en faire une.
La majorité des bugs se situe entre la chaise et le clavier...
Arrêtez de vous prendre la tête avec les partitions... passez au LVM
Arrêtez de vous prendre la tête avec les partitions... passez au LVM
- Wax-Reggea
- Hankyu
- Messages : 18
- Inscription : lun. 16 déc. 2013, 18:26
Re: [BASH] Priorité des métacharactere
Pour mon cas, les '>' et '<' sont des opérateurs de redirection seulement, mais je concoie qu'un tel classement n'existe pas dans une quelconque doc.
C'est possible de confirmer mon classement du coup ? Il me parait juste mais peut-être qu'un regard extérieure trouvera une absurdité.
C'est possible de confirmer mon classement du coup ? Il me parait juste mais peut-être qu'un regard extérieure trouvera une absurdité.
- FoolEcho
- Maître du Kyudo
- Messages : 10707
- Inscription : dim. 15 août 2010, 11:48
- Localisation : Basse-Normandie
Re: [BASH] Priorité des métacharactere
Ben non, ça n'est pas possible car ça n'a absolument aucun sens (en tous cas, je ne comprends pas ce que tu attends).Wax-Reggea a écrit :C'est possible de confirmer mon classement du coup ? Il me parait juste mais peut-être qu'un regard extérieure trouvera une absurdité.
Les opérateurs arithmétiques sont les seuls à avoir un ordre (ce qui rejoint le lien donnée par oktoberfest):
http://www.gnu.org/software/bash/manual ... Arithmetic
Pour les redirections et le reste, c'est séquentiel et l'ordre importe donc (cf. exemple du manuel).
http://www.gnu.org/software/bash/manual ... directions
«The following statement is not true. The previous statement is true.»
- Wax-Reggea
- Hankyu
- Messages : 18
- Inscription : lun. 16 déc. 2013, 18:26
Re: [BASH] Priorité des métacharactere
Il y a des priorités sur les redirections, par exemple si je fais : "ls > toto << salut", le bash va d'abord faire les '<<' (donc que je tape "salut") puis le '>'.
C'est ce genre de priorité qui m'intéresse.
Comme dit plus haut, dans mon cas, les '<' et '>' sont des opérateurs de redirections seulement.
C'est ce genre de priorité qui m'intéresse.
Comme dit plus haut, dans mon cas, les '<' et '>' sont des opérateurs de redirections seulement.
- benjarobin
- Maître du Kyudo
- Messages : 17235
- Inscription : sam. 30 mai 2009, 15:48
- Localisation : Lyon
Re: [BASH] Priorité des métacharactere
Je ne vois aucune priorité... Il lit séquentiellement les commandes.
est identique à
Code : Tout sélectionner
ls > toto << salut
Code : Tout sélectionner
ls << salut > toto
Zsh | KDE | PC fixe : core i7, carte nvidia
Titre d'un sujet : [Thème] Sujet (état) / Règles du forum
Titre d'un sujet : [Thème] Sujet (état) / Règles du forum
- FoolEcho
- Maître du Kyudo
- Messages : 10707
- Inscription : dim. 15 août 2010, 11:48
- Localisation : Basse-Normandie
Re: [BASH] Priorité des métacharactere
Évidemment, si tu tapes dans ce genre de construction, on n'est pas sorti.Wax-Reggea a écrit :Il y a des priorités sur les redirections, par exemple si je fais : "ls > toto << salut", le bash va d'abord faire les '<<' (donc que je tape "salut") puis le '>'.
C'est ce genre de priorité qui m'intéresse.
Absolument.benjarobin a écrit :Je ne vois aucune priorité... Il lit séquentiellement les commandes.est identique àCode : Tout sélectionner
ls > toto << salut
Code : Tout sélectionner
ls << salut > toto
Pour développer...
http://www.gnu.org/software/bash/manual ... -Documents
Appelle ça une priorité si tu veux, mais ce n'est pas le cas: c'est juste que tu indiques au shell qu'il y a encore des choses à tenir compte avant d'exécuter la commande ; c'est pourquoi "toto" est vide si tu interrompts avec CTRL+C par exemple (avec <<, c'est comme de faire une phrase en s'interrompant à la moitié: bash attend que la phrase soit complète avant de l'interpréter).
Ton exemple n'est pas le meilleur pour comprendre ce qu'il se passe...
Je te laisse méditer sur... Mettons:
Code : Tout sélectionner
$ cat > toto << salut
> Salut toto
> bye
> salut
$ cat toto
Salut toto
bye
cat << salut > toto
.Autre exemple qui te parlera peut-être mieux (tiré de http://en.wikipedia.org/wiki/Here_document):
Code : Tout sélectionner
$ tr a-z A-Z << END_TEXT
> one two three
> uno dos tres
> END_TEXT
ONE TWO THREE
UNO DOS TRES
tr a-z A-Z
attend des choses à analyser, d'accord ? Par conséquent, il ne va s'exécuter qu'après complétement du << ici.Ainsi si tu veux on peut rajouter l'écriture dans un fichier:
Code : Tout sélectionner
$ tr a-z A-Z > toto << END_TEXT # tr a-z A-Z << END_TEXT > toto est plus clair à mon avis
> one two three
> uno dos tres
> END_TEXT
$ cat toto
ONE TWO THREE
UNO DOS TRES
«The following statement is not true. The previous statement is true.»
- Wax-Reggea
- Hankyu
- Messages : 18
- Inscription : lun. 16 déc. 2013, 18:26
Re: [BASH] Priorité des métacharactere
Pourtant quand je tape "cat > toto << salut" et "cat << salut > toto" et je quitte avec Ctrl-C pendant le '<<', le fichier toto n'a pas était créer. C'est donc qu'il traite d'abord le '<<' puis un fois celui-ci fini, lance le cat puis met la sortie dans un fichier toto. Or sur c'est deux ligne, les opérateurs n'ont pas la même position l'un par rapport à l'autre.
Donc le bash ne traite pas les opérateurs dans l'ordre où ils sont rentrer. Comment fait-il alors ? Il y a bien un système de "priorité" (peut-etre pas le mot adapté) non ?
Donc le bash ne traite pas les opérateurs dans l'ordre où ils sont rentrer. Comment fait-il alors ? Il y a bien un système de "priorité" (peut-etre pas le mot adapté) non ?
- FoolEcho
- Maître du Kyudo
- Messages : 10707
- Inscription : dim. 15 août 2010, 11:48
- Localisation : Basse-Normandie
Re: [BASH] Priorité des métacharactere
Pas compris.Wax-Reggea a écrit :Pourtant quand je tape "cat > toto << salut" et "cat << salut > toto" et je quitte avec Ctrl-C pendant le '<<', le fichier toto n'a pas était créer. C'est donc qu'il traite d'abord le '<<' puis un fois celui-ci fini, lance le cat puis met la sortie dans un fichier toto.
Le comportement est le même dans les deux cas... mais oui, il cherche à traiter le << avant, mais si tu interrompts la commande à ce moment, il n'y a aucun fichier de créé justement.
«The following statement is not true. The previous statement is true.»
- Wax-Reggea
- Hankyu
- Messages : 18
- Inscription : lun. 16 déc. 2013, 18:26
Re: [BASH] Priorité des métacharactere
Ah oui, le comportement est le même, ça j'avais saisie mais justement pour qu'il soit identique, il va faire le '<<' avant le '>'.
Et justement je souhaite avoir cette ordre pour tous les opérateur. Par exemple, pour un '|' et un '>>' etc...
Désolé pour le qui-procos, c'est vrai que j'ai pas bien précisé sur mon post.
EDIT: Du coup, j'ai re-verifier mon ordre, il y avait des erreurs:
1: ';'
2: '<'
3: '<<'
4: '>' et '>>'
6: '|'
Et justement je souhaite avoir cette ordre pour tous les opérateur. Par exemple, pour un '|' et un '>>' etc...
Désolé pour le qui-procos, c'est vrai que j'ai pas bien précisé sur mon post.
EDIT: Du coup, j'ai re-verifier mon ordre, il y avait des erreurs:
1: ';'
2: '<'
3: '<<'
4: '>' et '>>'
6: '|'
- benjarobin
- Maître du Kyudo
- Messages : 17235
- Inscription : sam. 30 mai 2009, 15:48
- Localisation : Lyon
Re: [BASH] Priorité des métacharactere
Il n'y a aucun ordre !!!
; ou > ou | sont totalement incompatible entre eux. C'est une syntaxe bien précise, mais dire qu'il y a un ordre est complètement faux.
Ce n'est pas une formule de math, c'est une syntaxe de programmation...
; ou > ou | sont totalement incompatible entre eux. C'est une syntaxe bien précise, mais dire qu'il y a un ordre est complètement faux.
Ce n'est pas une formule de math, c'est une syntaxe de programmation...
Zsh | KDE | PC fixe : core i7, carte nvidia
Titre d'un sujet : [Thème] Sujet (état) / Règles du forum
Titre d'un sujet : [Thème] Sujet (état) / Règles du forum
- Wax-Reggea
- Hankyu
- Messages : 18
- Inscription : lun. 16 déc. 2013, 18:26
Re: [BASH] Priorité des métacharactere
Bien sur que si, il y un ordre dans lesquel le bash va faire les choses. Sinon, niveau processing comment ça ce passe ? Je crois que j'ai du mal à expliquer mon problème.
Quand tu rentre une commande dans un bash, celui-ci la decoupe selon un arbre binaire, où un noeud est soit un opérateur soit une commande, une fois créer, il parcours recursivement chaque noeud, et donc par exemple s'il trouve un '>' il va dup un fichier à la place de la sortie standard, s'il trouve un '<' il va dup un fichier à la place de l'entrée standard etc... Après, ma question est: Dans quel ordre découpe-t-il la commande ? Quels opérateurs doivent être plus haut dans l'ardre par rapport aux autres ?
Quand tu rentre une commande dans un bash, celui-ci la decoupe selon un arbre binaire, où un noeud est soit un opérateur soit une commande, une fois créer, il parcours recursivement chaque noeud, et donc par exemple s'il trouve un '>' il va dup un fichier à la place de la sortie standard, s'il trouve un '<' il va dup un fichier à la place de l'entrée standard etc... Après, ma question est: Dans quel ordre découpe-t-il la commande ? Quels opérateurs doivent être plus haut dans l'ardre par rapport aux autres ?
- FoolEcho
- Maître du Kyudo
- Messages : 10707
- Inscription : dim. 15 août 2010, 11:48
- Localisation : Basse-Normandie
Re: [BASH] Priorité des métacharactere
Heu... Je ne connais pas l'analyse lexicale et syntaxique de bash, mais c'est nettement plus complexe que ça.Wax-Reggea a écrit :Quand tu rentre une commande dans un bash, celui-ci la decoupe selon un arbre binaire, où un noeud est soit un opérateur soit une commande, une fois créer, il parcours recursivement chaque noeud, et donc par exemple s'il trouve un '>' il va dup la sortie standard dans un fichier, s'il trouve un '<' il va dup un fichier à la place de l'entrée standard etc... Après, ma question est: Dans quel ordre découpe-t-il la commande ? Quels opérateurs doivent être plus haut dans l'ardre par rapport aux autres ?
Mais c'est ce que disait benjarobin, comme quoi pipe, etc. sont incompatibles et ne s'analysent pas en terme de formule mathématique avec une quelconque priorité: c'est un langage, l'interprèteur de bash cherche à vérifier que la phrase est syntaxiquement correcte et si elle a du sens, tu comprends ce qu'on essaie de te dire ? Il n'y a pas de notion de priorité entre ces éléments: ce serait comme de savoir ce qui prévaut entre la ponctuation, le verbe, le sujet et les compléments d'une phrase et chaque élément entre eux... un point n'est pas prioritaire par rapport à un point virgule, «je» n'est pas prioritaire sur «tu», un point n'est pas prioritaire sur «je», etc.
«The following statement is not true. The previous statement is true.»
- Wax-Reggea
- Hankyu
- Messages : 18
- Inscription : lun. 16 déc. 2013, 18:26
Re: [BASH] Priorité des métacharactere
Admettons, alors que fait le l'interpréteur comme je rentre une commande ? Je veux dire, il y a bien un moment, ou il va executer des binaires et faire ce que la commande est sensée faire...
Bien sur, c'est plus compliqué, mais cette étape, il la fait j'en suis certain.FoolEcho a écrit :Heu... Je ne connais pas l'analyse lexicale et syntaxique de bash, mais c'est nettement plus complexe que ça.
- FoolEcho
- Maître du Kyudo
- Messages : 10707
- Inscription : dim. 15 août 2010, 11:48
- Localisation : Basse-Normandie
Re: [BASH] Priorité des métacharactere
Bien évidemment, mais encore une fois ce n'est pas une affaire d'opérateur prioritaire ou pas. Bash analyse l'instruction avant d'exécuter... et une instruction peut être éminément tordue (hors arithmétique où là oui, il y a des priorités déterminées).Wax-Reggea a écrit :Bien sur, c'est plus compliqué, mais cette étape, il la fait j'en suis certain.FoolEcho a écrit : Heu... Je ne connais pas l'analyse lexicale et syntaxique de bash, mais c'est nettement plus complexe que ça.
Enlève-toi le mal de tête en construisant des instructions dans l'ordre séquentiel car de toutes manières c'est ainsi que bash procède, c'est tout (à mon avis
ls << salut > toto
est plus compréhensible que ls > toto << salut
, même s'il se trouve que bash comprend les deux tournures... comme une phrase qui serait du type: «je vais sortir ce soir» et «ce soir, je vais sortir» ... en dehors de ce cas précis et des raccourcis d'écriture, tu as juste mis le doigt sur un cas assez particulier).«The following statement is not true. The previous statement is true.»
- Wax-Reggea
- Hankyu
- Messages : 18
- Inscription : lun. 16 déc. 2013, 18:26
Re: [BASH] Priorité des métacharactere
S'il ne se base pas sur des prioprités, comment fait-il pour construire son arbre correctement ? Ils ont fait une IA qui parle en bash ?FoolEcho a écrit :Bien évidemment, mais encore une fois ce n'est pas une affaire d'opérateur prioritaire ou pas. Bash analyse l'instruction avant d'exécuter... et une instruction peut être éminément tordue (hors arithmétique où là oui, il y a des priorités déterminées).
Alors oui, mon exemple est un cas bien tordu, mais c'est ce genre de truc qui fait qu'on comprend ou pas.
- FoolEcho
- Maître du Kyudo
- Messages : 10707
- Inscription : dim. 15 août 2010, 11:48
- Localisation : Basse-Normandie
Re: [BASH] Priorité des métacharactere
Wax-Reggea a écrit :S'il ne se base pas sur des prioprités, comment fait-il pour construire son arbre correctement ? Ils ont fait une IA qui parle en bash ?
Cela se base sur des règles (des règles propres à un langage de programmation donné), non des priorités: bash analyse et reconnaît (ou non) ces motifs. Une fois fait, il peut tenter d'exécuter le code.
Si ça t'intéresse autant, procure-toi des cours sur les analyses lexicales et syntaxiques et tu comprendras peut-être ce qu'on se tue à te dire.
«The following statement is not true. The previous statement is true.»
- benjarobin
- Maître du Kyudo
- Messages : 17235
- Inscription : sam. 30 mai 2009, 15:48
- Localisation : Lyon
Re: [BASH] Priorité des métacharactere
Si tu veux des infos :
http://www.aosabook.org/en/bash.html
http://www.opensource.apple.com/source/ ... arse.y?txt
Après il faut connaitre ce que c'est le token parsing, le langage yacc / bison...
http://www.aosabook.org/en/bash.html
http://www.opensource.apple.com/source/ ... arse.y?txt
Après il faut connaitre ce que c'est le token parsing, le langage yacc / bison...
Zsh | KDE | PC fixe : core i7, carte nvidia
Titre d'un sujet : [Thème] Sujet (état) / Règles du forum
Titre d'un sujet : [Thème] Sujet (état) / Règles du forum