単一の端末で使用できるようにオンラインでチュートリアルを作成する場合、インライン コードをソースすると便利なことがあります...ただし、これらのいずれも期待どおりに動作しませんでした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
(たとえば、bash
macOS のデフォルトはリリース 3.2.57(1) です)。
リリース 4.0 ではバグが修正されました:
デバイスや名前付きパイプなどの通常以外のファイルから `.' がコマンドを読み取って実行できないバグを修正しました。
(これはhttps://tiswww.case.edu/php/chet/bash/CHANGES)
プロセス置換でsource
(または)を使用する場合にによって読み取られるファイルは通常のファイルではないため、リリース 4.0 で修正されたバグが発生します。.
最新のリリースは現在リリース 5.0.7(1) であり、コードは期待どおりに動作します。