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'obtiens pas cette erreur dans une autre machine suse:
/bin/bash --version
GNU bash, version 3.2.39(1)-release (x86_64-suse-linux-gnu)
Copyright (C) 2007 Free Software Foundation, Inc.
Pourquoi l'erreur?
Réponses:
Votre script fait-il référence
/bin/bash
ou/bin/sh
dans sa ligne de hachage? Le shell système par défaut dans Ubuntu est dash , pas bash , donc si vous en avez,#!/bin/sh
votre script utilisera un shell différent de celui que vous attendez. Dash n'a pas l'<<<
opérateur de redirection.la source
Docker:
J'avais ce problème de mon Dockerfile comme j'avais:
Cependant, selon ce problème , il a été résolu:
Solution:
Notez les guillemets autour de chaque paramètre.
la source
Si vous utilisez ce qui suit pour exécuter votre script:
Ensuite, vous voudrez utiliser ce qui suit à la place:
La raison en est que Bash n'est pas le shell par défaut pour Ubuntu. Donc, si vous utilisez "sh", il utilisera simplement le shell par défaut; qui est en fait Dash. Cela se produira peu importe si vous avez
#!/bin/bash
en haut de votre script. En conséquence, vous devrez spécifier explicitement d'utiliserbash
comme indiqué ci-dessus, et votre script doit s'exécuter comme prévu.Dash ne prend pas en charge les redirections de la même manière que Bash.
la source
Vous pouvez obtenir la sortie de cette commande et la placer dans une variable. puis utilisez
heredoc
. par exemple:peut être écrit comme:
et comme ça (c'est ce que vous voulez):
Exemple pratique en
busybox
sousdocker
conteneur:la source
echo 'text' | nc
qui est encore plus court.faites-le de la manière la plus simple,
Ou utilisez la coque
la source
Une autre raison de l'erreur peut être si vous exécutez une tâche cron qui met à jour une copie de travail de subversion et que vous avez ensuite tenté d'exécuter un script versionné qui était dans un état de conflit après la mise à jour ...
la source
Sur ma machine, si j'exécute un script directement, la valeur par défaut est
bash
.Si je l'exécute avec
sudo
, la valeur par défaut estsh
.C'est pourquoi je rencontrais ce problème lorsque j'utilisais
sudo
.la source
Dans mon cas, l'erreur est due au fait que j'ai mis ">>" deux fois
je viens de le corriger comme
la source
Avant d'exécuter le script, vous devez vérifier la première ligne du script shell pour l'interpréteur.
Ex: si les scripts commencent par / bin / bash, exécutez le script en utilisant la commande ci-dessous "bash nom_script.sh"
si le script commence par / bin / sh, exécutez le script en utilisant la commande ci-dessous "sh nom_script.sh"
./sample.sh - Cela détectera l'interpréteur à partir de la première ligne du script et l'exécutera.
Différentes distributions Linux ayant différents shells par défaut.
la source