#1 Le 03/09/2010, à 13:41
- teto
Commande bash donne resultats differents en script et en ligne de cmd
bonjour,
J'essaye de programmer un script bash et je suis surpris de constater que cette commande donne un résultat différent quand lancé depuis un script bash de quand je la copie/colle:
ls -1 /home/teto/workspace/cml/etc/redemo/data/5757575/5757575_5775/TEST3 | grep -i wav
En ligne de commande, ca m'affiche le bon fichier:
5757575_5775_TEST3.wav
tandis que dans mon script bash ca ne retourne rien.
SI je mets juste' ls -1 /home/teto/workspace/cml/etc/redemo/data/5757575/5757575_5775/TEST3', la commande appelée depuis le script m'affichera la taille du fichier en plus du fichier tandis qu'en ligne de commande ca m'affiche juste les fichiers.
Comment unifier ce comportement très perturbant je trouve.
Nb: je precise que mon script est appelé depuis JAVA en créant un processu bash + nom du script.
Dernière modification par teto (Le 03/09/2010, à 13:42)
La révolution est en marche.
Hors ligne
#2 Le 03/09/2010, à 13:52
- Totor
Re : Commande bash donne resultats differents en script et en ligne de cmd
je vais me la jouer à la sputnick : You win the famous "Useless use of ls" !
shopt -s nocaseglob
printf "%s\n" /home/teto/workspace/cml/etc/redemo/data/5757575/5757575_5775/TEST3/*.wav
shopt -u nocaseglob
pour ton pb de ls, je pense que tu dois te tromper entre l (la lettre) et 1 (le chiffre)
-- Lucid Lynx --
Hors ligne
#3 Le 03/09/2010, à 14:20
- Coolgeek
Re : Commande bash donne resultats differents en script et en ligne de cmd
sinon verifie aussi que dans ton .bashrc tu n'a pas d'alias sur ls
tu peux le chercker aussi via la commande alias
Hors ligne
#4 Le 03/09/2010, à 15:05
- teto
Re : Commande bash donne resultats differents en script et en ligne de cmd
Ok merci à vous 2, pas mal l'idée des alias mais ne sont-ils pas pris en compte dans les 2 cas ?
Totor, je crois que tu avais raison sur le coup du 1 et du l. COmme j'aime bien ta solution avec printf c'est ce que j'essaye d'utiliser:
Pour l'instant j'ai ce code qui marche
command="printf \"%s\n\" ${directory}/*.wav"
result=`${command} | head -n 1`
mais j'aimerais pouvoir avoir le "| head -n 1" dans la variable command comme ceci (enregistrer la commande sous forme de chaine me permet de l'afficher pr le debug puis de la lancer) mais ca marche pas, ca m'affiche |head -n 1 à la fin des resultats
command="printf \"%s\n\" ${directory}/*.wav | head -n 1"
result=`${command} `
Voila
Merci encore
La révolution est en marche.
Hors ligne
#5 Le 03/09/2010, à 15:19
- Totor
Re : Commande bash donne resultats differents en script et en ligne de cmd
pas besoin de tout cela :
command='result=( ${directory}/*.wav )'
eval "${command}"
echo "${result[0]}"
-- Lucid Lynx --
Hors ligne
#6 Le 03/09/2010, à 15:42
- teto
Re : Commande bash donne resultats differents en script et en ligne de cmd
genial totor, t'es une bête ^^
Du coup j'en profite pr une petite dernière (question): pr se premunir des espaces dans les noms de fichier je croyais que soit fallait echapper l'espace via "\ " soit mettre le nom du fichier entre guillemets ce que je fais (commande censée récupérer la durée du fichier wav):
soxi -D "/home/teto/workspace/cml/etc/redemo/data/5757575/5757575_5775/TEST3/te st.wav"
Autant ca marche en console (me renvoie 32.422323sec) autant le script me renvoie rien du tout ( = "")
command="soxi -D \"${audioFile}\""
eval "auduration=${command}"
Une idée ?
La révolution est en marche.
Hors ligne
#7 Le 03/09/2010, à 16:02
- Totor
Re : Commande bash donne resultats differents en script et en ligne de cmd
command='soxi -D "${audioFile}"'
eval "auduration=\"\$(${command})\""
-- Lucid Lynx --
Hors ligne
#8 Le 03/09/2010, à 16:06
- teto
Re : Commande bash donne resultats differents en script et en ligne de cmd
ok en fait j'ai compris les erreurs qui ne venaient pas de là mais d'ailleurs:
En fait il faut rajouter à la fin de ces commandes 2>&1 pour rediriger stderr vers stdout et pvr logger les erreurs.
En fait il s'agissait de problème de droits dans ce cas précis. Ptet que dans les autres cas y avait des erreurs passées également inapercues.
merci en tout cas pr ta réactivité
Dernière modification par teto (Le 03/09/2010, à 16:06)
La révolution est en marche.
Hors ligne
#9 Le 03/09/2010, à 16:17
- teto
Re : Commande bash donne resultats differents en script et en ligne de cmd
par contre je ne comprends pas très bien comment résoudre les histoires de droit.
Mon site web java/servelt lancé depuis Eclipse tourne via tomcat/postgresql et lance un script qui demande à soxi la taille du fichier audio. (Tout ca sauf tomcat/soxi/postgresql se trouve dans mon répertoire sous lequel je suis connecté)
Comment faire pr que soxi ait le droit d'accéder à ce fichier audio ?
La révolution est en marche.
Hors ligne
#10 Le 03/09/2010, à 20:41
- sputnick
Re : Commande bash donne resultats differents en script et en ligne de cmd
je vais me la jouer à la sputnick : You win the famous "Useless use of ls" !
shopt -s nocaseglob printf "%s\n" /home/teto/workspace/cml/etc/redemo/data/5757575/5757575_5775/TEST3/*.wav shopt -u nocaseglob
pour ton pb de ls, je pense que tu dois te tromper entre l (la lettre) et 1 (le chiffre)
(
shopt -s nocaseglob
printf "%s\n" /home/teto/workspace/cml/etc/redemo/data/5757575/5757575_5775/TEST3/*.wav
)
On ne peut pas mettre d'array dans un string!
https://sputnick.fr/
Hors ligne
#11 Le 03/09/2010, à 20:54
- Totor
Re : Commande bash donne resultats differents en script et en ligne de cmd
oui aussi
après, on peut pinailler en disant que cette solution génère inutilement une copie de l'environnement en court pour si peu. pour le cas présent, ce n'est pas bien grave mais s'il fallait mettre à jour plusieurs variables avec l'option d'activée, ce serait pas la solution.
-- Lucid Lynx --
Hors ligne
#12 Le 06/09/2010, à 11:20
- teto
Re : Commande bash donne resultats differents en script et en ligne de cmd
Je continue (tjrs dans le mm style de pb):
command="java -jar ${redemoslideshoapp} ${directory} ${auduration} ${secperpic} 2>&1"
echo "Command:"
echo "${command}"
eval "slideshowappexitcode=${command}"
Seulement quand j'écris le script ci-dessus, j'obtiens l'erreur
java -jar /home/teto/workspace/reDemoSlideShow/dist/reDemoSlideShow.jar /home/teto/workspace/cml/etc/redemo/data/5757575/5757575_5775/TEST3 32 2.0 2>&1
/home/teto/workspace/cml/etc/shell/redemo.sh: line 172: -jar : commande introuvable
J'ai essayé de mettre des guillemets mais je ne sais pas trop où les mettre pour obtenir le résultat voulu (2>&1 est censé rediriger stderr vers stdout "java -jar" lance un programme contenu dans le jar dont le nom est juste après, entre les 2 on a des paramètres).
Encore merci de votre aide.
La révolution est en marche.
Hors ligne
#13 Le 06/09/2010, à 12:00
- Totor
Re : Commande bash donne resultats differents en script et en ligne de cmd
eval permet d'exécuter une instruction.
mais il faut également indiquer d'exécuter "command" :
eval "slideshowappexitcode=\$(${command})"
Dernière modification par Totor (Le 06/09/2010, à 12:01)
-- Lucid Lynx --
Hors ligne
#14 Le 07/09/2010, à 11:53
- teto
Re : Commande bash donne resultats differents en script et en ligne de cmd
Nickel totor, non seulement ca marche mais ca me supprime le pb de permission dont j'avais parlé ci dessus (on me souffle dans l'oreillete qu'en fait il essayait d'exécuter le fichier .wav )
Si je comprends bien la commande:
eval "slideshowappexitcode=\$(${command})"
va d'abord parser l'argument et le transformer en (par exemple avec $auduration =2, $directory = "mondirectory") :
eval "slideshowappexitcode=$(java -jar monapp.sh /mondirectory/ 32 2 2>&1)"
le $( ) indique que c'est une commande shell ?
Dernière question si "slideshowappexitcode" est défini avant est-ce qu'il sera remplacé lors du parsing ? (je crois que c'est une des erreurs que j'ai également rencontré).
Merci encore
La révolution est en marche.
Hors ligne