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 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é smile

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

Totor a écrit :

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)

big_smile

( 
    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 wink
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 smile )

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