¿Por qué el comando fuente no funciona con la sustitución de procesos en bash 3.2?
syntax incompatibility (1)
Tengo el siguiente script de shell:
cat <(echo foo)
source <(echo bar=bar)
echo $bar
Sin embargo, funciona de manera diferente en GNU bash 3.2 y 4.3 como se muestra a continuación:
$ /bin/bash foo.sh
foo
3.2.53(1)-release
$ /usr/local/bin/bash foo.sh
foo
bar
4.3.33(1)-release
¿Por qué esto funciona solo en una versión? ¿Es un error o una característica adicional?
Parece que la sustitución del proceso funciona bien, sin embargo, el problema radica en el origen del archivo.
Si este es el comportamiento esperado, ¿qué otra sintaxis debo usar en su lugar para
source
algo de la entrada estándar para que sea compatible entre diferentes versiones de bash?
Esta es una limitación conocida en bash 3.2 . Para solucionarlo:
source /dev/stdin <<<"$(echo bar=bar)"
... o, de manera similar:
source /dev/stdin <<<"$(cat <(...))"