インラインテキストのソース方法

インラインテキストのソース方法

単一の端末で使用できるようにオンラインでチュートリアルを作成する場合、インライン コードをソースすると便利なことがあります...ただし、これらのいずれも期待どおりに動作しませんでしたfoo。これらすべてに対して「バー」になることを期待しています。理由をご存知の方はいませんか?

#!/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"

私の推測では、sourceファイル記述子から読み取ることができないということでしょうか?同じこと.を代わりに使用することも試しました。source

私はMacOSを使用していますbash --version。出力は次のようになります:

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

答え1

これはリリース 4.0 より前のリリースでは機能しませんbash(たとえば、bashmacOS のデフォルトはリリース 3.2.57(1) です)。

リリース 4.0 ではバグが修正されました:

デバイスや名前付きパイプなどの通常以外のファイルから `.' がコマンドを読み取って実行できないバグを修正しました。

(これはhttps://tiswww.case.edu/php/chet/bash/CHANGES

プロセス置換でsource(または)を使用する場合にによって読み取られるファイルは通常のファイルではないため、リリース 4.0 で修正されたバグが発生します。.

最新のリリースは現在リリース 5.0.7(1) であり、コードは期待どおりに動作します。

関連情報