Como obter texto embutido

Como obter texto embutido

Quando você está criando tutoriais on-line para as pessoas usarem em um único terminal, às vezes é bom fornecer código in-line... no entanto, nenhum deles funcionou como eu esperaria. Eu esperaria fooser um "bar" para tudo isso. Alguém 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"

Meu único palpite é que sourcenão é possível ler um descritor de arquivo? Eu também tentei usar .em vez da sourcemesma coisa.

Estou no MacOS, bash --versionsaída:

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

Responder1

Isso não funcionaria em bashversões anteriores à versão 4.0 (por exemplo, o padrão bashno macOS, que é a versão 3.2.57(1)).

A versão 4.0 teve uma correção de bug:

Corrigido um bug que causava `.' falhar ao ler e executar comandos de arquivos não regulares, como dispositivos ou pipes nomeados.

(isso é dehttps://tiswww.case.edu/php/chet/bash/CHANGES)

O arquivo lido por source(ou .) quando você o usa com uma substituição de processo não é um arquivo normal, portanto, acionaria o bug que foi corrigido na versão 4.0.

A versão mais recente é atualmente a versão 5.0.7(1), onde seu código funciona conforme o esperado.

informação relacionada