Bash: erreur de Syntaxe: redirection inattendu
Je fais cela dans un script:
read direc <<< $(basename `pwd`)
et j'obtiens:
Syntax error: redirection unexpected
dans une machine ubuntu
/bin/bash --version
GNU bash, version 4.0.33(1)-release (x86_64-pc-linux-gnu)
alors que je n'ai pas cette erreur dans un autre suse machine:
/bin/bash --version
GNU bash, version 3.2.39(1)-release (x86_64-suse-linux-gnu)
Copyright (C) 2007 Free Software Foundation, Inc.
Pourquoi le message d'erreur?
- Pour référence, la commande fonctionne sur cygwin, ainsi ( /bin/bash --version GNU bash, version 3.2.49(23)-libération (i686-pc-cygwin) Copyright (C) 2007 Free Software Foundation, Inc. )
Vous devez vous connecter pour publier un commentaire.
Votre référence de script
/bin/bash
ou/bin/sh
dans son hachage bang en ligne? Le système par défaut du shell sous Ubuntu est dash, pas bash, donc si vous avez#!/bin/sh
alors votre script sera à l'aide d'un autre shell que vous attendez. Dash n'a pas le<<<
opérateur de redirection.!#/bin/bash
.your_script_name.sh
, de cette façon, l'interprète déclarées dans le script est utilisé.#!
; pas!#
.Docker:
Je recevais ce problème de mon Dockerfile que j'ai eu:
Toutefois, selon ce problème, il a été résolu:
Solution:
Notez les guillemets autour de chaque paramètre.
le faire de la manière la plus simple,
Ou utiliser le shell
Vous pouvez obtenir la sortie de la commande et de la mettre dans une variable. ensuite, utilisez
heredoc
. par exemple:peut être écrit comme:
et comme cela (c'est ce que vous voulez):
Exemple pratique dans
busybox
sousdocker
conteneur:echo 'text' | nc
qui est encore plus courte.Si vous utilisez les éléments suivants pour exécuter votre script:
Ensuite, vous aurez envie d'utiliser le suivant à la place:
La raison pour cela est que Bash n'est pas le shell par défaut pour Ubuntu. Donc, si vous utilisez "sh", alors il suffit d'utiliser le shell par défaut; qui est en fait le tableau de bord. Ce sera le cas, peu importe si vous avez
#!/bin/bash
en haut de votre script. Comme résultat, vous aurez besoin de spécifier explicitement à utiliserbash
comme indiqué ci-dessus, et votre script doit s'exécuter à attendre.Dash ne prend pas en charge redirige le même que Bash.
Une autre raison de l'erreur peut être si vous exécutez une tâche cron qui met à jour une copie de travail subversion, puis a tenté d'exécuter un versionnées script qui a été dans un état conflictuel après la mise à jour...
Dans mon cas, l'erreur est parce que j'ai mis ">>" deux fois
je viens de le corriger comme
Sur ma machine, si je lance un script directement, la valeur par défaut est
bash
.Si je le lance avec
sudo
, la valeur par défaut estsh
.C'est pourquoi j'ai été frappé de ce problème lorsque j'ai utilisé
sudo
.Avant d'exécuter le script, vous devez vérifier la première ligne du script shell pour l'interprète.
Par exemple:
si les scripts commence avec /bin/bash , exécutez le script à l'aide de la commande ci-dessous
"bash script_name.sh"
si le script commence par /bin/sh, exécutez le script à l'aide de la commande ci-dessous
"sh script_name.sh"
./sample.sh - Cela permet de déceler l'interprète à partir de la première ligne du script et l'exécuter.
Différentes distributions Linux différentes coques en tant que par défaut.