affectation de variable
Le
Rakotomandimby (R12y) Mihamina
Bonjour,
J'ai le script ci dessous, qui, quand je l'execute, me renvoie les
erreurs:
ERROR: Failed to open input file: No such file or directory
ERROR: Cannot open input file " --downmix --resample 5512 -q 1 -o /home/mihamina/little/kar3/aina_pazzapa/aina_pazzapa_never_change.ogg - ": No such file or directory
ERROR: Cannot open input file " --downmix --resample 5512 -q 1 -o /home/mihamina/little/kar3/Aline_raelisoa/125_aline_raelisoa.ogg - ": No such file or directory
Le problème c'est que j'ai l'affectation de variable :
[]
ENCODER_OPTIONS=" --downmix --resample 5512 -q 1 -o ${NEWNAME} - "
[]
et le shell tente d'executer la chaine de caractère, en remplaçant
NEWNAME par le path du fichier.
le vrai problème c'est qu'il tente d'éxécuter ce qu'il y a entre
guillemets. Pourquoi?
Voici le script
#!/bin/zsh
BASEP=${HOME}/music/
TARGETP=${HOME}/little/
mkdir -pv $TARGETP
ENCODER=oggenc
DECODER=oggdec
DECODER_OPTIONS=" -o - "
for FICHIER in ${BASEP}**/*.ogg(.ND); do
{
cd $FICHIER:h
NEWNAME=`print $FICHIER | sed 's/music/little/g'`
mkdir -pv $NEWNAME:h
ENCODER_OPTIONS=" --downmix --resample 5512 -q 1 -o ${NEWNAME} - "
$DECODER $DECODER_OPTIONS | $ENCODER $ENCODER_OPTIONS
}
--
Les serveurs avec 10Mb/s se louent maintenant pour 50 ou 60 Euros par mois!
La preuve http://www.google.fr/search?q=serveur+dedie
Infogerance de serveur dedie http://aspo.rktmb.org/activites/infogerance
(En louant les services de l'ASPO vous luttez contre la fracture numerique)
J'ai le script ci dessous, qui, quand je l'execute, me renvoie les
erreurs:
ERROR: Failed to open input file: No such file or directory
ERROR: Cannot open input file " --downmix --resample 5512 -q 1 -o /home/mihamina/little/kar3/aina_pazzapa/aina_pazzapa_never_change.ogg - ": No such file or directory
ERROR: Cannot open input file " --downmix --resample 5512 -q 1 -o /home/mihamina/little/kar3/Aline_raelisoa/125_aline_raelisoa.ogg - ": No such file or directory
Le problème c'est que j'ai l'affectation de variable :
[]
ENCODER_OPTIONS=" --downmix --resample 5512 -q 1 -o ${NEWNAME} - "
[]
et le shell tente d'executer la chaine de caractère, en remplaçant
NEWNAME par le path du fichier.
le vrai problème c'est qu'il tente d'éxécuter ce qu'il y a entre
guillemets. Pourquoi?
Voici le script
#!/bin/zsh
BASEP=${HOME}/music/
TARGETP=${HOME}/little/
mkdir -pv $TARGETP
ENCODER=oggenc
DECODER=oggdec
DECODER_OPTIONS=" -o - "
for FICHIER in ${BASEP}**/*.ogg(.ND); do
{
cd $FICHIER:h
NEWNAME=`print $FICHIER | sed 's/music/little/g'`
mkdir -pv $NEWNAME:h
ENCODER_OPTIONS=" --downmix --resample 5512 -q 1 -o ${NEWNAME} - "
$DECODER $DECODER_OPTIONS | $ENCODER $ENCODER_OPTIONS
}
--
Les serveurs avec 10Mb/s se louent maintenant pour 50 ou 60 Euros par mois!
La preuve http://www.google.fr/search?q=serveur+dedie
Infogerance de serveur dedie http://aspo.rktmb.org/activites/infogerance
(En louant les services de l'ASPO vous luttez contre la fracture numerique)

Poser une question


Pas compris. Ça a l'air d'être un effet de l'absence de SH_WORD_SPLIT
Le "print|sed" est inutile et aléatoire de toute manière,
Il y aura moins d'erreur de cette manière,
cd $BASEP
for FICHIER in **/*.ogg(.ND); do
NEWNAME=${TARGETP}/${FICHIER}
mkdir -pv $NEWNAME:h
ENCODER_OPTIONS=" --downmix --resample 5512 -q 1 -o ${NEWNAME} -
(cd $FICHIER:h
$DECODER $DECODER_OPTIONS ) |
$ENCODER $ENCODER_OPTIONS
done
Mais bon, il en reste surement encore.
Mieux vaut utiliser "sh" et un bon vieux "find | while read"
et virer toutes ces variables constantes et à usage unique.
Compare ces trois scripts :
#!/bin/zsh
a="foo bar baz"
for i in $a; do
echo $i
done
#!/bin/sh
a="foo bar baz"
for i in $a; do
echo $i
done
#!/bin/zsh
a=(foo bar baz)
for i in $a; do
echo $i
done
Ça devrait te donner la réponse.
C'est infiniment plus lourd à faire fiablement qu'utiliser le glob de zsh :
il faut jouer avec IFS pour avoir un découpage aussi fiable, en particulier.
C'est au contraire une bonne pratique que d'avoir tous les paramètres du
script regroupés à un endroit facilement modifiable sans risquer de tout
casser. Ça améliore la lisibilité et la maintenabilité.
Non là ça passera pas.
C'est pour ça que j'ai dû faire le "print| sed",
sinon je me retrouve trop en profondeur.
Non. Je suis sur une machine de test, et l'arborescence est légèrement
différente sur la machine sur laquelle le script devra vraiment tourner.
De plus ce n'est que le début du script, j'ai du arreter le developpement
parceque je bloquait, mais ces variables me seront encore utiles.
Si ce truc devait s'arreter là, je l'aurais fait en interactif :-)
Mais merci pour tes conseils, ça prouve que tu cherche à en donner de
bons, puisque tu vas jusqu'à analyser le code de celui qui demande de
l'aide ;-).
--
Les serveurs avec 10Mb/s se louent maintenant pour 50 ou 60 Euros par mois!
La preuve http://www.google.fr/search?q=serveur+dedie
Infogerance de serveur dedie http://aspo.rktmb.org/activites/infogerance
(En louant les services de l'ASPO vous luttez contre la fracture numerique)
Mais à part les passages à la ligne dans les noms des fichiers, ça ne
craint pas grand chose.
C'est contradictioire, on ne peut pas stocker des noms de fichier dans
une variable scalaire et demander plus tard de découper cette
variable.
En plus, les variables sont éparpillées dans le script.