Hago esto 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 no obtengo este error en otra máquina suse:
/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?
Respuestas:
¿Su script hace referencia
/bin/bash
o/bin/sh
en su línea hash bang? El shell predeterminado del sistema en Ubuntu es dash , no bash , por lo que si lo tiene#!/bin/sh
, su script utilizará un shell diferente al esperado. Dash no tiene el<<<
operador de redirección.fuente
Estibador:
Estaba recibiendo este problema de mi Dockerfile como tenía:
Sin embargo, de acuerdo con este problema , se resolvió:
Solución:
Observe las comillas alrededor de cada parámetro.
fuente
Si está utilizando lo siguiente para ejecutar su script:
Entonces querrás usar lo siguiente en su lugar:
La razón de esto es que Bash no es el shell predeterminado para Ubuntu. Entonces, si usa "sh", entonces solo usará el shell predeterminado; que en realidad es Dash Esto sucederá independientemente de si tiene
#!/bin/bash
en la parte superior de su secuencia de comandos. Como resultado, deberá especificar explícitamente el usobash
como se muestra arriba, y su secuencia de comandos debe ejecutarse como se espera.Dash no admite redirecciones iguales a Bash.
fuente
Puede obtener el resultado de ese comando y ponerlo en una variable. luego usar
heredoc
. por ejemplo:se puede escribir como:
y así (esto es lo que quieres):
Ejemplo práctico en
busybox
debajo deldocker
contenedor:fuente
echo 'text' | nc
que es aún más corto.hazlo de la manera más simple,
O usa el caparazón
fuente
Otra razón para el 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 ...
fuente
En mi máquina, si ejecuto un script directamente, el valor predeterminado es
bash
.Si lo ejecuto con
sudo
, el valor predeterminado essh
.Por eso me encontraba con este problema cuando lo usaba
sudo
.fuente
En mi caso, el error se debe a que he puesto ">>" dos veces
solo lo corrijo como
fuente
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, ejecútelos usando el siguiente comando "bash script_name.sh"
si el script comienza con / bin / sh, ejecútelo usando el siguiente comando "sh script_name.sh"
./sample.sh: detectará el intérprete desde la primera línea del script y se ejecutará.
Diferentes distribuciones de Linux que tienen diferentes shells por defecto.
fuente