source(.) パイプカール出力

source(.) パイプカール出力

私のWebサーバーには、次の内容を含むファイルfがあります。

alias ll='ls -l'

他のLinuxシステムでは、次のことをしたいが、コマンドを正しく実行できません。

curl http://myserver/f | ?

どこ?各行は現在の環境に読み込まれます。したがって、上記のファイルが与えられると、これは実行と同じ効果を持ちます。

% alias ll='ls -l'

現在のシェルプロセスで。可能ですか?

答え1

試してみてはいかがでしょうかeval "$(curl "$URL")"

しかし、正しいURLを取得したこと、ダウンロードしたコードが不快なことをしないことを確認することをお勧めします。

答え2

Bashでは、次のようにコマンド/dev/stdin出力を1行にリダイレクトしてcurlから/dev/stdinソーシングを試みることができます。

source /dev/stdin  <<< "$(curl http://myserver/f)"

これにより、サブシェル(親シェルには表示されません)で(ソース)変数の割り当てを避ける必要があります。

答え3

パイプは常にサブシェルを生成するようです。たぶん、ファイルの交換はここでより適切であるかもしれません。

## this doesn't work
# curl http://myserver/f | . /dev/stdin

## this works
. <(curl http://myserver/f)

関連情報