
人々が単一の端末で使用できるようにオンラインチュートリアルを作成するときは、コードをインラインで取得するのが最善ですが...どちらも期待どおりに機能しませんでした。私は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)で、コードは期待どおりに動作します。