salida - Bash: error de sintaxis: redirección inesperada
tuberias linux (8)
Estibador:
Estaba obteniendo este problema de mi archivo Docker como lo hice:
RUN bash < <(curl -s -S -L https://raw.githubusercontent.com/moovweb/gvm/master/binscripts/gvm-installer)
Sin embargo, de acuerdo con este problema , se resolvió:
La forma ejecutiva permite evitar el munging de cadenas de shell y ejecutar comandos usando una imagen base que no contiene
/bin/sh
.Nota
Para usar un shell diferente, que no sea
/bin/sh
, use el formulario exec que pasa en el shell deseado. Por ejemplo,
RUN ["/bin/bash", "-c", "echo hello"]
Solución:
RUN ["/bin/bash", "-c", "bash < <(curl -s -S -L https://raw.githubusercontent.com/moovweb/gvm/master/binscripts/gvm-installer)"]
Observe las comillas alrededor de cada parámetro.
Lo hago en un script:
read direc <<< $(basename `pwd`)
y obtengo:
Syntax error: redirection unexpected
en una máquina ubuntu
/bin/bash --version
GNU bash, version 4.0.33(1)-release (x86_64-pc-linux-gnu)
mientras que no obtengo este error en otra máquina sospechosa:
/bin/bash --version
GNU bash, version 3.2.39(1)-release (x86_64-suse-linux-gnu)
Copyright (C) 2007 Free Software Foundation, Inc.
¿Por qué el error?
Antes de ejecutar el script, debe verificar la primera línea del script de shell para el intérprete.
Por ejemplo: si los scripts comienzan con / bin / bash, ejecute el script usando el siguiente comando "bash script_name.sh"
si el script comienza con / bin / sh, ejecute el script usando el siguiente comando "sh script_name.sh"
./sample.sh - Esto detectará el intérprete desde la primera línea del script y se ejecutará.
Diferentes distribuciones de Linux que tienen diferentes shells por defecto.
En mi caso, el error es porque puse ">>" dos veces
mongodump --db=$DB_NAME --collection=$col --out=$BACKUP_LOCATION/$DB_NAME-$BACKUP_DATE >> >> $LOG_PATH
solo lo corrijo como
mongodump --db=$DB_NAME --collection=$col --out=$BACKUP_LOCATION/$DB_NAME-$BACKUP_DATE >> $LOG_PATH
En mi máquina, si ejecuto un script directamente, el valor predeterminado es bash
.
Si lo ejecuto con sudo
, el valor predeterminado es sh
.
Es por eso que estaba atacando este problema cuando usé sudo
.
Otro motivo del error puede ser si está ejecutando un trabajo cron que actualiza una copia de trabajo de subversión y luego ha intentado ejecutar un script versionado que estaba en un estado conflictivo después de la actualización ...
Puedes obtener el resultado de ese comando y ponerlo en una variable. luego usa heredoc
. por ejemplo:
nc -l -p 80 <<< "tested like a charm";
se puede escribir como:
nc -l -p 80 <<EOF
tested like a charm
EOF
y así (esto es lo que quieres):
text="tested like a charm"
nc -l -p 80 <<EOF
$text
EOF
Ejemplo práctico en busybox
bajo el contenedor de 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!
hazlo de la manera más simple,
direc=$(basename `pwd`)
O usa el caparazón
$ direc=${PWD##*/}