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 13/11/2010, à 14:32

PenB

[BASH] Sortie standard vers un tableau dans un script

Quand je lance mon script j'ai l'erreur suivante :

/home/benoit/.batch/mon_script : 6: Syntax error: "(" unexpected

Alors que quand je copie colle les lignes directement dans bash ça marche !!

Mon script :

#!/bin/sh
# Récupère les mots-clés présents dans les IPTC et les stockes dans un tableau

IFS=$'\n'
Keywords=($ (exiv2 -PIkt "$1" | grep Keywords | cut -c 47-))

Pour le contexte, c'est en lien avec ce post : http://forum.ubuntu-fr.org/viewtopic.php?id=428813
C'est mon second script bash de toute ma vie !! Merci de votre aide !


OS actuel : Fedora 16 avec un vrai Gnome 3 ^ ^
Ubuntiste de Ubuntu Breezy Badger 5.10 à Maverick Meerkat 10.10 et Windows définitivement supprimé depuis février 2006...

Hors ligne

#2 Le 13/11/2010, à 16:56

chopinhauer

Re : [BASH] Sortie standard vers un tableau dans un script

Il ne faut pas mettre d'espace entre le dollar $ et la parenthèse ouverte (. L'autre paire de parenthèses ne sert à rien, mais cela n'engendre pas d'erreurs…


Pensez à donner un bon titre à vos sujets : cela permettra d'aider d'autres utilisateurs dans votre même situation. Ce n'est pas qu'en donnant des solutions qu'on aide, mais aussi en posant des bonnes questions et… facilement trouvables.

Hors ligne

#3 Le 13/11/2010, à 19:07

PenB

Re : [BASH] Sortie standard vers un tableau dans un script

J'ai donc essayé

Keywords=($(exiv2 -PIkt "$1" | grep Keywords | cut -c 47-))

Ça ne change rien.

$1 c'est l'unique argument du script, à savoir le chemin vers une photo.

$( expr ) c'est pour évaluer expr
($( expr ) ) c'est pour stocker le résultat de l'évaluation de expr sous forme de tableau. Sinon il me met toutes les lignes de la sortie standard à la queue leu leu dans une seule variable.

Je dis ça d'après ce que j'ai compris des différents tutos sur internet. Je me trompe peut-être.


OS actuel : Fedora 16 avec un vrai Gnome 3 ^ ^
Ubuntiste de Ubuntu Breezy Badger 5.10 à Maverick Meerkat 10.10 et Windows définitivement supprimé depuis février 2006...

Hors ligne

#4 Le 13/11/2010, à 19:27

chopinhauer

Re : [BASH] Sortie standard vers un tableau dans un script

Effectivement, j'avais oublié la forme var=( ) pour les tableau.

Tu utilises /bin/sh comme interpréteur, donc t'as pas accès à toutes les fonctionnalités bash (et en plus sous Ubuntu /bin/sh n'est pas bash, mais dash). Mets /bin/bash à la place.

Dernière modification par chopinhauer (Le 14/11/2010, à 15:47)


Pensez à donner un bon titre à vos sujets : cela permettra d'aider d'autres utilisateurs dans votre même situation. Ce n'est pas qu'en donnant des solutions qu'on aide, mais aussi en posant des bonnes questions et… facilement trouvables.

Hors ligne

#5 Le 14/11/2010, à 12:13

PenB

Re : [BASH] Sortie standard vers un tableau dans un script

Merci pour ton aide, je pensais que /bin/sh c'était bash. Mais ça ne corrige pas le pb !

J'ai supprimé les parenthèses de la forme var=() pour les tableaux. Ça passe (j'ai une erreur plus loin qui est normale car ma variable n'est plus un tableau). C'est donc cette première paire de parenthèses qui pose problème à l'interpréteur. Pourquoi donc ?


OS actuel : Fedora 16 avec un vrai Gnome 3 ^ ^
Ubuntiste de Ubuntu Breezy Badger 5.10 à Maverick Meerkat 10.10 et Windows définitivement supprimé depuis février 2006...

Hors ligne

#6 Le 14/11/2010, à 15:53

chopinhauer

Re : [BASH] Sortie standard vers un tableau dans un script

PenB a écrit :

Merci pour ton aide, je pensais que /bin/sh c'était bash. Mais ça ne corrige pas le pb !

Même si c'était bash (ce qui était pendant longtemps vrai), beaucoup de programmes se comportent de manière différente selon la façon avec laquelle on les appelle. Bash appelée comme /bin/sh se mets en mode de compatibilité avec le shell du standard POSIX. C'est souhaitable car pour les scripts système on voudrait qu'il se comporte pareil, peu importe le shell utilisée. Mettre /bin/sh empêche de mettre des bashismes dans le script.

J'ai supprimé les parenthèses de la forme var=() pour les tableaux. Ça passe (j'ai une erreur plus loin qui est normale car ma variable n'est plus un tableau). C'est donc cette première paire de parenthèses qui pose problème à l'interpréteur.
Pourquoi donc ?

Elle pose des problèmes seulement en modalité compatibilité POSIX, si t'appelle l'interpréteur comme /bin/bash il n'y a pas de problèmes et tu peux remettre les parenthèses.


Pensez à donner un bon titre à vos sujets : cela permettra d'aider d'autres utilisateurs dans votre même situation. Ce n'est pas qu'en donnant des solutions qu'on aide, mais aussi en posant des bonnes questions et… facilement trouvables.

Hors ligne

#7 Le 16/11/2010, à 00:48

PenB

Re : [BASH] Sortie standard vers un tableau dans un script

et en compatibilité posix comment on fait pour récupérer la sortie standard dans un tableau ?


OS actuel : Fedora 16 avec un vrai Gnome 3 ^ ^
Ubuntiste de Ubuntu Breezy Badger 5.10 à Maverick Meerkat 10.10 et Windows définitivement supprimé depuis février 2006...

Hors ligne

#8 Le 16/11/2010, à 01:01

chopinhauer

Re : [BASH] Sortie standard vers un tableau dans un script

Dans une shell POSIX (cf. Shell Command Language) il n'y a pas de tableaux. Tu dois te contenter de un while read.


Pensez à donner un bon titre à vos sujets : cela permettra d'aider d'autres utilisateurs dans votre même situation. Ce n'est pas qu'en donnant des solutions qu'on aide, mais aussi en posant des bonnes questions et… facilement trouvables.

Hors ligne

#9 Le 16/11/2010, à 15:06

Totor

Re : [BASH] Sortie standard vers un tableau dans un script

chopinhauer a écrit :

Dans une shell POSIX (cf. Shell Command Language) il n'y a pas de tableaux. Tu dois te contenter de un while read.

Pas tout à fait, il y a une astuce :

$ /bin/sh
$ set -- "arg 1" "arg 2" "arg 3" arg x
$ printf "%s\n" "${@}"
arg 1
arg 2
arg 3
arg
x

wink

edit : mais il n'y a qu'un seul tableau possible !

Dernière modification par Totor (Le 16/11/2010, à 15:10)


-- Lucid Lynx --

Hors ligne