Cómo obtener texto en línea

Cómo obtener texto en línea

Cuando creas tutoriales en línea para que las personas los usen en una sola terminal, a veces es bueno obtener código en línea... sin embargo, ninguno de estos funcionó como esperaba. Esperaría fooser "bar" para todos estos. ¿Alguien sabe por qué?

#!/usr/bin/env bash

source <(echo "export foo=bar");
echo "$foo"

source <(cat <<< "export foo=bar");
echo "$foo"

source <(cat <<EOF
  export foo=bar

EOF
);


echo "$foo"

Mi única suposición es que sourceno se puede leer un descriptor de archivo. También intenté usar .en lugar de sourcelo mismo.

Estoy en MacOS, bash --versionsalida:

GNU bash, version 3.2.57(1)-release (x86_64-apple-darwin18) 
Copyright (C) 2007 Free Software Foundation, Inc.

Respuesta1

Esto no funcionaría en bashversiones anteriores a la 4.0 (por ejemplo, la versión predeterminada bashen macOS, que es la versión 3.2.57(1)).

La versión 4.0 tuvo una corrección de errores:

Se corrigió un error que causaba `.' no poder leer ni ejecutar comandos de archivos no normales, como dispositivos o canalizaciones con nombre.

(eso es dehttps://tiswww.case.edu/php/chet/bash/CAMBIOS)

El archivo leído por source(o .) cuando lo usa con una sustitución de proceso no es un archivo normal, por lo que desencadenaría el error que se solucionó en la versión 4.0.

La versión más reciente es actualmente la versión 5.0.7(1), donde su código funciona como se esperaba.

información relacionada