tuberias salida pipes operador guardar filtros enviar comando archivo bash ubuntu

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?


¿Tu script hace referencia a /bin/bash o /bin/sh en su línea hash bang? El shell del sistema predeterminado en Ubuntu es dash , no bash , por lo que si tiene #!/bin/sh , su script usará un shell diferente del esperado. Dash no tiene el operador de redirección <<< .


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##*/}