以前は、source
次のようなコマンドを使用しました。
source file_name
しかし、私がやろうとしているのはこれです:
echo something | source
どちらも機能しません。
以前は、source
次のようなコマンドを使用しました。
source file_name
しかし、私がやろうとしているのはこれです:
echo something | source
どちらも機能しません。
回答:
以来source
(または.
、引数としてファイルを取る)、あなたが試みることができます:
source <(echo something)
ソースコマンドにはファイル引数が必要です。プロセス置換を使用して一部のシェルでそれを取得できます。これは、同じ方法でシェルが置き換えられるためです...
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で開く異常なパイプから読み取っていることがわかります。