O exemplo dado também funciona para mim, mas há uma fonte potencial de problemas: dependendo dos valores que estão sendo definidos, você pode precisar de aspas duplas em torno da substituição de comando para evitar a divisão de palavras e a expansão de caracteres curinga:
eval "$("${DIR}/test.py" "$1")"
Observe que, no mínimo, não ter aspas duplas causará problemas se a saída contiver vários comandos separados por novas linhas. Isso ocorre porque, sem as aspas duplas, a saída é dividida em "palavras" com base no espaço em branco (geralmente espaços, tabulações e novas linhas) e, em seguida, eval
as une novamente com espaços. Resultado líquido: todas as novas linhas são convertidas em espaços e, portanto, todos os comandos que supostamente são linhas separadas são reunidos em uma única e longa confusão de comandos.
Para um exemplo extremo, suponha que o test.py mostre isto:
# Define some variables:
export SOME_VAR="6 * 5"
O processo de mesclagem dividir-expandir fornece este comando resultante:
# Define some variables: export SOME_VAR="6 file1.txt file2.txt otherfile.png 5"
(onde "file1.txt file2.txt otherfile.png" são todos os arquivos no diretório atual.) Isso não é o que você quer de maneira alguma.