パイプを使用したソースコマンドの提供

パイプを使用したソースコマンドの提供

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で開かれた匿名パイプから読み取ることがわかります。

関連情報