La ligne suivante dans mon Bash script
echo $AAAA" "$DDDD" "$MOL_TAG >> ${OUPUT_RESULTS}
me donne cette erreur :
line 46: ${OUPUT_RESULTS}: ambiguous redirect
Pourquoi ?
La ligne suivante dans mon Bash script
echo $AAAA" "$DDDD" "$MOL_TAG >> ${OUPUT_RESULTS}
me donne cette erreur :
line 46: ${OUPUT_RESULTS}: ambiguous redirect
Pourquoi ?
Bash peut être assez obtus parfois.
Les commandes suivantes renvoient toutes des messages d'erreur différents pour une erreur fondamentalement identique :
$ echo hello >
bash: syntax error near unexpected token `newline`
$ echo hello > ${NONEXISTENT}
bash: ${NONEXISTENT}: ambiguous redirect
$ echo hello > "${NONEXISTENT}"
bash: : No such file or directory
L'ajout de guillemets autour de la variable semble être un bon moyen de traiter le message "redirection ambiguë" : Vous avez tendance à obtenir un meilleur message lorsque vous avez fait une erreur de frappe -- et lorsque l'erreur est due à des espaces dans le nom du fichier, l'utilisation de guillemets est la solution.
Vous obtiendrez également ceci si vous redirigez la sortie d'un script qui contient des redirections. Ne me demandez pas comment je le sais.
@PaulJackson, ...ce n'est pas vrai. Comme un démonstrateur de copier-coller : sh -c 'echo hello >/tmp/hello' >/tmp/world
fonctionne correctement.
Peut-être un ajout précieux, pour moi utiliser sh au lieu de bash était une solution. Ceci : for f in onfw/* ; do xslt -xsl:dwsToTEI.xslt -s:- < "$f" > data/ basename "$f"
; cela fonctionne dans sh, bash donne une redirection ambiguë pour les noms de fichiers avec des espaces (la citation n'a pas aidé).
Mettez des guillemets autour de votre variable. Si elle comporte des espaces, vous obtiendrez une "redirection ambiguë". Vérifiez également votre orthographe.
echo $AAAA" "$DDDD" "$MOL_TAG >> "${OUPUT_RESULTS}"
eg de redirection ambiguë
$ var="file with spaces"
$ echo $AAAA" "$DDDD" "$MOL_TAG >> ${var}
bash: ${var}: ambiguous redirect
$ echo $AAAA" "$DDDD" "$MOL_TAG >> "${var}"
$ cat file\ with\ spaces
aaaa dddd mol_tag
Les citations n'ont pas d'importance. S'il y a des espaces dans l'expansion de la variable, vous obtiendrez des résultats dans le mauvais fichier et/ou des messages d'erreur erronés impliquant la partie post-espace du nom du fichier.
J'ai récemment découvert que les blancs dans le nom du fichier de redirection provoquent le message "redirection ambiguë".
Par exemple, si vous redirigez vers application$(date +%Y%m%d%k%M%S).log
et que vous spécifiez les mauvais caractères de formatage, la redirection échouera avant 10 heures du matin par exemple. Si toutefois vous avez utilisé application$(date +%Y%m%d%H%M%S).log
il réussirait. Cela est dû au fait que le %k
Le format donne ' 9'
pour 9 heures du matin où %H
donne '09'
pour 9 heures.
echo $(date +%Y%m%d%k%M%S)
donne 20140626 95138
echo $(date +%Y%m%d%H%M%S)
donne 20140626095138
La date erronée pourrait donner quelque chose comme :
echo "a" > myapp20140626 95138.log
où ce qui suit est ce qui serait souhaité :
echo "a" > myapp20140626095138.log
L'erreur est que vous devez mettre des guillemets autour de la variable, qu'elle contienne ou non des espaces. Voir Quand mettre des guillemets autour d'une variable shell ?
Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.
11 votes
Vous ne montrez pas tout. où avez vous obtenu
${OUPUT_RESULTS}
. C'est aussi une erreur d'orthographe si vous voulez dire$OUTPUT_RESULTS}
0 votes
Si on a écrit
OUPUT_RESULTS = "filename.log"
on obtiendra une redirection ambiguë. Parce que bash ne veut PAS d'espace autour du=
opérateur.