215 votes

Bash : Erreur de syntaxe : redirection inattendue

Je le fais dans un script :

read direc <<< $(basename `pwd`)

et je reçois :

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 ne reçois 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 ?

12voto

TechJS Points 1628

Vous pouvez obtenir la sortie de cette commande et la mettre dans une variable. puis utiliser heredoc. par exemple :

nc -l -p 80 <<< "tested like a charm";

peut être écrit comme :

nc -l -p 80 <<EOF
tested like a charm
EOF

et comme ceci (c'est ce que vous voulez) :

text="tested like a charm"
nc -l -p 80 <<EOF
$text
EOF

Exemple pratique en conteneur busybox sous docker :

kasra@ubuntu:~$ docker run --rm -it busybox
/ # nc -l -p 80 <<< "tested like a charm";
sh: syntax error: unexpected redirection


/ # nc -l -p 80 <<EOL
> tested like a charm
> EOL
^Cpunt!       => socket listening, no errors. ^Cpunt! is result of CTRL+C signal.


/ # text="tested like a charm"
/ # nc -l -p 80 <<EOF
> $text
> EOF
^Cpunt!

2voto

ghostdog74 Points 86060

le faire de la manière la plus simple,

direc=$(basename `pwd`)

Ou utilisez la coque

$ direc=${PWD##*/}

Prograide.com

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.

Powered by:

X