#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
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
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
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