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 foo
ser 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 source
não é possível ler um descritor de arquivo? Eu também tentei usar .
em vez da source
mesma coisa.
Estou no MacOS, bash --version
saí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 bash
versões anteriores à versão 4.0 (por exemplo, o padrão bash
no 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.