
source
以前は、次のコマンドを使用していました。
source file_name
しかし、私がしたいことは:
echo something | source
これはうまくいきません。
答え1
source
(または.
)ファイルを引数として使用するため、プロセスの置き換えを試すことができます。
source <(echo something)
答え2
ソースコマンドにファイルパラメータが必要です。一部のシェルでは、プロセスの置き換えによってこれを行うことができます。シェルは同じ方法で置き換えるからです。
arg=$(echo hi)
...echo
プロセスの交換の場合、サブシェルを名前付きファイル(通常/dev/fd/62
または他のもの)に置き換えるコマンドラインのサブシェル出力を含むビット。ファイル記述子へのいくつかのリンク。パイプの場合、ファイル記述子は0なので...
echo 'echo hi' | . /dev/fd/0
.../dev/stdin
またはいずれにせよ、すべてのLinuxシステムでうまく機能します。それに加えて、多くのシステムがあります。ここでドキュメントを同様に使用できます。
. /dev/fd/3 3<<HI
$(echo 'echo hi')
HI
以下では、シェルがプロセス置換を処理する方法を確認できます。
(set -x; readlink <(:))
...印刷(存在するbash
):
+ set +x
+ readlink /dev/fd/63
++ :
pipe:[2212581]
...それで、シェルが置換を実行し、readlink
ファイル記述子63で開かれた匿名パイプから読み取ることがわかります。