Trop d'arguments dans mon bash

Bonjour à tous,

Je me suis mis au "bash" pour la première fois hier et je suis content de
moi. C'est rare.
Sous ubuntu j'ai réalisé le fichier bash ci dessous.
http://lilypond-french-users.1298960.n2.nabble.com/file/n7578151/bash bash
Pour le lancer: ouvrir la console dans le dossier où vous aurez téléchargé
le fichier, puis saisir: *bash bash* (le premier "bash" pour la commande, le
second pour le fichier)

Je rencontre une anomalie que je résumerai ainsi
Dans les environnements de condition (if... fi), à chaque fois que je fais
appel à une variable contenant *plusieurs* mots, la console me retourne un
message d'erreur du type
*bash: ligne 102 : [: trop d'arguments*
(Aucune anomalie si les variables n'ont qu'un seul mot.)

Je n'arrive pas à résoudre le problème.
Quelqu'un a-t-il une idée ?

Cordialement,
Laurent

···

--
View this message in context: http://lilypond-french-users.1298960.n2.nabble.com/Trop-d-arguments-dans-mon-bash-tp7578151.html
Sent from the LilyPond French Users mailing list archive at Nabble.com.

C'est difficile à savoir où se trouve le problème sans pouvoir voir le script, mais en général les variables ne peuvent pas avoir d'espace. Donc :

mon variable = 1

ne marche presque jamais. En revanche,

mon_variable = 1

marche quasiment toujours, et

mon-variable = 1

marche avec certains langages dont l'analyseur syntaxique sait faire la différence entre un tiret et la soustraction.

Cordialement,
~Mike

···

On 24 juin 2012, at 13:51, legoss wrote:

Bonjour à tous,

Je me suis mis au "bash" pour la première fois hier et je suis content de
moi. C'est rare.
Sous ubuntu j'ai réalisé le fichier bash ci dessous.
http://lilypond-french-users.1298960.n2.nabble.com/file/n7578151/bash bash
Pour le lancer: ouvrir la console dans le dossier où vous aurez téléchargé
le fichier, puis saisir: *bash bash* (le premier "bash" pour la commande, le
second pour le fichier)

Je rencontre une anomalie que je résumerai ainsi
Dans les environnements de condition (if... fi), à chaque fois que je fais
appel à une variable contenant *plusieurs* mots, la console me retourne un
message d'erreur du type
*bash: ligne 102 : [: trop d'arguments*
(Aucune anomalie si les variables n'ont qu'un seul mot.)

Je n'arrive pas à résoudre le problème.
Quelqu'un a-t-il une idée ?

Cordialement,
Laurent

Bonjour Mike,

Le script est en pièce jointe. s'il n'apparaît sur ton écran, dis-le moi.
OK pour les variable à 1 chaîne de caractères.

Mais je peux difficilement faire autrement dans la mesure où mes variables
correspondent aux titres et autres commentaires gravées sur la partition.
Tu imagines dans le copyright une mention du style:
"Utilisé_avec_ l'autorisation_de_l'auteur" ?

Peut-être est-ce une mauvaise méthode ou formulation de ma part des
conditions if...fi.
Mais dans l'état de mes connaissances actuelles, j'ai besoin qu'on me fasse
la "courte éshell".

···

--
View this message in context: http://lilypond-french-users.1298960.n2.nabble.com/Trop-d-arguments-dans-mon-bash-tp7578151p7578153.html
Sent from the LilyPond French Users mailing list archive at Nabble.com.

Salut,

Je crois qu'il suffit de mettre tes arguments entre guillemets pour que par exemple "Utilisé avec l'autorisation de l'auteur" soit considéré comme un seul mot.

référence : http://abs.traduc.org/abs-5.0-fr/ch05.html

A+

Christophe Pochon
http://www.christophe-pochon.com

···

Le 24 juin 2012 14:38, legoss <****@****> a écrit :

Bonjour Mike,

Le script est en pièce jointe. s'il n'apparaît sur ton écran, dis-le moi.
OK pour les variable à 1 chaîne de caractères.

Mais je peux difficilement faire autrement dans la mesure où mes variables
correspondent aux titres et autres commentaires gravées sur la partition.
Tu imagines dans le copyright une mention du style:
"Utilisé_avec_ l'autorisation_de_l'auteur" ?

Peut-être est-ce une mauvaise méthode ou formulation de ma part des
conditions if...fi.
Mais dans l'état de mes connaissances actuelles, j'ai besoin qu'on me fasse
la "courte éshell".

--
View this message in context: http://lilypond-french-users.1298960.n2.nabble.com/Trop-d-arguments-dans-mon-bash-tp7578151p7578153.html

Sent from the LilyPond French Users mailing list archive at Nabble.com.


liste de diffusion lilypond-user-fr
lilypond-user-fr@gnu.org
https://lists.gnu.org/mailman/listinfo/lilypond-user-fr

C'est bon !
J'ai rajouté les guillemets en suivant tes conseils :

if [ *"*$variable*"* = "0" ]

Merci à tous les deux !
Laurent

···

--
View this message in context: http://lilypond-french-users.1298960.n2.nabble.com/Trop-d-arguments-dans-mon-bash-tp7578151p7578155.html
Sent from the LilyPond French Users mailing list archive at Nabble.com.

Pourriez-vous en deux mots expliquer ce qu'est le bash ? A part une nouvelle application d'encodage quelle est sa fonction ? je ne comprends pas suffisamment l'anglais ni ai le temps de lire la doc. Merci
Daniel Bernair

···

----- Original Message ----- From: "legoss" <****@****>
To: <lilypond-user-fr@gnu.org>
Sent: Sunday, June 24, 2012 1:51 PM
Subject: Trop d'arguments dans mon bash

Bonjour à tous,

Je me suis mis au "bash" pour la première fois hier et je suis content de
moi. C'est rare.
Sous ubuntu j'ai réalisé le fichier bash ci dessous.
http://lilypond-french-users.1298960.n2.nabble.com/file/n7578151/bash bash
Pour le lancer: ouvrir la console dans le dossier où vous aurez téléchargé
le fichier, puis saisir: *bash bash* (le premier "bash" pour la commande, le
second pour le fichier)

Je rencontre une anomalie que je résumerai ainsi
Dans les environnements de condition (if... fi), à chaque fois que je fais
appel à une variable contenant *plusieurs* mots, la console me retourne un
message d'erreur du type
*bash: ligne 102 : [: trop d'arguments*
(Aucune anomalie si les variables n'ont qu'un seul mot.)

Je n'arrive pas à résoudre le problème.
Quelqu'un a-t-il une idée ?

Cordialement,
Laurent

--
View this message in context: http://lilypond-french-users.1298960.n2.nabble.com/Trop-d-arguments-dans-mon-bash-tp7578151.html
Sent from the LilyPond French Users mailing list archive at Nabble.com.

_______________________________________________
liste de diffusion lilypond-user-fr
lilypond-user-fr@gnu.org
https://lists.gnu.org/mailman/listinfo/lilypond-user-fr

C'est à la fois un shell et un langage de script qui permet d'exécuter des commandes et lancer des logiciels à partir de la ligne de commande.

~Mike

···

On 25 juin 2012, at 11:37, Daniel Bernair wrote:

Pourriez-vous en deux mots expliquer ce qu'est le bash ? A part une nouvelle application d'encodage quelle est sa fonction ? je ne comprends pas suffisamment l'anglais ni ai le temps de lire la doc. Merci
Daniel Bernair
----- Original Message ----- From: "legoss" <****@****>
To: <lilypond-user-fr@gnu.org>
Sent: Sunday, June 24, 2012 1:51 PM
Subject: Trop d'arguments dans mon bash

Bonjour à tous,

Je me suis mis au "bash" pour la première fois hier et je suis content de
moi. C'est rare.
Sous ubuntu j'ai réalisé le fichier bash ci dessous.
http://lilypond-french-users.1298960.n2.nabble.com/file/n7578151/bash bash
Pour le lancer: ouvrir la console dans le dossier où vous aurez téléchargé
le fichier, puis saisir: *bash bash* (le premier "bash" pour la commande, le
second pour le fichier)

Je rencontre une anomalie que je résumerai ainsi
Dans les environnements de condition (if... fi), à chaque fois que je fais
appel à une variable contenant *plusieurs* mots, la console me retourne un
message d'erreur du type
*bash: ligne 102 : [: trop d'arguments*
(Aucune anomalie si les variables n'ont qu'un seul mot.)

Je n'arrive pas à résoudre le problème.
Quelqu'un a-t-il une idée ?

Cordialement,
Laurent

--
View this message in context: http://lilypond-french-users.1298960.n2.nabble.com/Trop-d-arguments-dans-mon-bash-tp7578151.html
Sent from the LilyPond French Users mailing list archive at Nabble.com.

_______________________________________________
liste de diffusion lilypond-user-fr
lilypond-user-fr@gnu.org
https://lists.gnu.org/mailman/listinfo/lilypond-user-fr

_______________________________________________
liste de diffusion lilypond-user-fr
lilypond-user-fr@gnu.org
https://lists.gnu.org/mailman/listinfo/lilypond-user-fr

Daniel Bernair wrote

Pourriez-vous en deux mots expliquer ce qu'est le bash ?

Bash: Bourne-again shell. Une coquille issue d'Unix , en d'autres mots: un
interpréteur de commandes. Il fait en gros ça:

- lancer des programmes, copier des fichiers, plus d'autres joyeusetés et
vérifier leur validité
- grouper des commandes dans un fichier qu'on nomme «script»
- il interprète -traduit- ces commandes dans un langage compris par le
système d'exploitation qui l'exécute

Dans le cas présent, le bash va se mettre en mode batch: il lit un fichier
texte fait avec une suite de commandes et l'interprète.

···

-----
Cordialement

Bernard
--
View this message in context: http://lilypond-french-users.1298960.n2.nabble.com/Trop-d-arguments-dans-mon-bash-tp7578151p7578158.html
Sent from the LilyPond French Users mailing list archive at Nabble.com.

Bonjour à tous,

Bonjour !

Je me suis mis au "bash" pour la première fois hier et je suis content de
moi. C'est rare. Sous ubuntu j'ai réalisé le fichier bash ci dessous.
http://lilypond-french-users.1298960.n2.nabble.com/file/n7578151/bash bash
Pour le lancer: ouvrir la console dans le dossier où vous aurez
téléchargé le fichier, puis saisir: *bash bash* (le premier "bash" pour la
commande, le second pour le fichier)

Je rencontre une anomalie que je résumerai ainsi
Dans les environnements de condition (if... fi), à chaque fois que je fais
appel à une variable contenant *plusieurs* mots, la console me retourne
un message d'erreur du type *bash: ligne 102 : [: trop d'arguments*
(Aucune anomalie si les variables n'ont qu'un seul mot.)

J'ai parcouru votre script, et j'ai quelques remarques :
1°) - Que se passe-t-il si vous avez plus de huit strophes ?
      Une structure for serait plus adaptée, du genre :
      combien de strophes ? -> Nbstrophes
      de 1 à Nbstrophes faire :
      lire les paroles de la strophe.
Ce qui vous affranchirait d'un nombre maximal fixé à 8

2°) - De même pour les structures addlyrics, avec tous ces if...elif,
essayez plutôt une boucle for en fonction du nombre de strophes...

3°) - Vos noms de variables ne doivent pas contenir d'espace (qui est un
séparateur). Si vous voulez manipuler des chaînes de caractères contenant
des espaces, ou des caractères spéciaux, mettez un antislash avant, comme
vous l'avez fait en début de fichier :
relative='\\relative', encore que j'aurais plutôt écrit :
relative="\\relative", avec des guillemets...

de même, un nom de fichier peut être :

Nom\ de\ fichier\ contenant\ des\ espaces

Essayez dans une console pour voir les résultats avec \(, \\, etc...

par exemple :
touch Nom\ avec\(parentheses\)
touch Nom\ avec\*autres\$
(attention, avec \\, on crée plusieurs fichiers...)

Ceci ne concerne que les noms de fichiers, les variables ne doivent pas
contenir d'espaces ou de caractères spéciaux, encore moins des caractères
accentués.

Sinon, c'est un bon début pour quelqu'un qui découvre le bash...

Mais ne nommez pas votre fichier "bash", c'est un nom d'interpréteur, et
vous pourriez rencontrer des problèmes...

Cordialement,

Philippe

···

Le Dim 24 juin 2012 13:51, legoss a écrit :

Merci pour vos explications.
Daniel Bernair

···

----- Original Message ----- From: "bameylan" <****@****>
To: <lilypond-user-fr@gnu.org>
Sent: Monday, June 25, 2012 11:58 AM
Subject: Re: Trop d'arguments dans mon bash

Daniel Bernair wrote

Pourriez-vous en deux mots expliquer ce qu'est le bash ?

Bash: Bourne-again shell. Une coquille issue d'Unix , en d'autres mots: un
interpréteur de commandes. Il fait en gros ça:

- lancer des programmes, copier des fichiers, plus d'autres joyeusetés et
vérifier leur validité
- grouper des commandes dans un fichier qu'on nomme «script»
- il interprète -traduit- ces commandes dans un langage compris par le
système d'exploitation qui l'exécute

Dans le cas présent, le bash va se mettre en mode batch: il lit un fichier
texte fait avec une suite de commandes et l'interprète.

-----
Cordialement

Bernard
--
View this message in context: http://lilypond-french-users.1298960.n2.nabble.com/Trop-d-arguments-dans-mon-bash-tp7578151p7578158.html
Sent from the LilyPond French Users mailing list archive at Nabble.com.

_______________________________________________
liste de diffusion lilypond-user-fr
lilypond-user-fr@gnu.org
https://lists.gnu.org/mailman/listinfo/lilypond-user-fr

@Phil :
Merci pour tous ces éclaircissements. En effet, j'ai transpiré pas mal sans
les structures for (papier coller à la pelle donc). J'ai aussi galéré pas
mal avec le nom des variables. Il y pas mal de trucs que je n'ai pas compris
et que j'ai fait plus par instinct que par raison. Mais ça va venir... avec
le temps.
Merci encore,
Laurent

···

--
View this message in context: http://lilypond-french-users.1298960.n2.nabble.com/Trop-d-arguments-dans-mon-bash-tp7578151p7578161.html
Sent from the LilyPond French Users mailing list archive at Nabble.com.

J'ai parcouru votre script, et j'ai quelques remarques :
1°) - Que se passe-t-il si vous avez plus de huit strophes ?
      Une structure for serait plus adaptée, du genre :
2°) - De même pour les structures addlyrics, avec tous ces if...elif,
essayez plutôt une boucle for en fonction du nombre de strophes...

Je plussoie...

relative='\\relative', encore que j'aurais plutôt écrit :
relative="\\relative", avec des guillemets...

double quote, pas guillemet, même en anglais les vrais guillemets
typographiques sont courbes et non droits, la double quote est normalement
réservée à la programmation mais dévoyée par l'usage de la machine à écrire
qui n'avait pas assez de touches pour tout mettre.

Sinon, c'est un bon début pour quelqu'un qui découvre le bash...

Je plussoie derechef

Mais ne nommez pas votre fichier "bash", c'est un nom d'interpréteur, et
vous pourriez rencontrer des problèmes...

la bonne façon de faire est de nommer le fichier lilygenerator par exemple (un
nom explicite) et de lui donner l'extension .sh, car bien que les extensions
soient en général inutiles sous linux celle-ci permet de lancer le programme
plus facilement.

···

Le lundi 25 juin 2012 12:46:48 Philippe Neyrat a écrit :

--
Cordialement,
Daniel Cartron

J'ai parcouru votre script, et j'ai quelques remarques :
1°) - Que se passe-t-il si vous avez plus de huit strophes ?
      Une structure for serait plus adaptée, du genre :
2°) - De même pour les structures addlyrics, avec tous ces if...elif,
essayez plutôt une boucle for en fonction du nombre de strophes...

Je plussoie...

relative='\\relative', encore que j'aurais plutôt écrit :
relative="\\relative", avec des guillemets...

double quote, pas guillemet, même en anglais les vrais guillemets
typographiques sont courbes et non droits, la double quote est normalement
réservée à la programmation mais dévoyée par l'usage de la machine à écrire
qui n'avait pas assez de touches pour tout mettre.

Sinon, c'est un bon début pour quelqu'un qui découvre le bash...

Je plussoie derechef

Mais ne nommez pas votre fichier "bash", c'est un nom d'interpréteur, et
vous pourriez rencontrer des problèmes...

la bonne façon de faire est de nommer le fichier lilygenerator par exemple (un
nom explicite) et de lui donner l'extension .sh, car bien que les extensions
soient en général inutiles sous linux celle-ci permet de lancer le programme
plus facilement.

···

Le lundi 25 juin 2012 12:46:48 Philippe Neyrat a écrit :

--
Cordialement,
Daniel Cartron

Sur les conseils de Phil, j'ai "bidouillé" ce qui suit, pour générer
automatiquement autant d'environnements \addlyrics que nécessaire:

···

####################

if [ "$ns" = 1 ]
then
echo -e " $addlyrics {
      
    }"
else
for ((i=1;i<$ns+1;i++))
do
echo " $addlyrics {
      \lyricmode { \set stanza = $i.
      
      }
    }"
done
fi

####################

Je ne sais pas si on peut écrire ça plus correctement, mais ça fonctionne.

--
View this message in context: http://lilypond-french-users.1298960.n2.nabble.com/Trop-d-arguments-dans-mon-bash-tp7578151p7578166.html
Sent from the LilyPond French Users mailing list archive at Nabble.com.