eval "$(/opt/homebrew/bin/brew shellenv)" コマンドは実際に何をしますか?

eval "$(/opt/homebrew/bin/brew shellenv)" コマンドは実際に何をしますか?

Homebrewは私たちeval $(/opt/homebrew/bin/brew shellenv)~/.zprofile

私はシェルスクリプトに初めて触れました。私は$varvarという変数を参照することを知っていますが、それはすべてです。パスを入れるとはどういう意味ですか$()?ここに別の主張がありますがshellenv、それはどういう意味ですか?

答え1

$()はいコマンドの置き換え。角かっこ内のコマンドを実行し、そのコマンドの出力を返します。

プログラムの出力を変数に入れるのによく使われます。例えば

$ month=$(date +%m)
$ echo $month
02

あるいは、あるプログラムの出力を別のプログラムの引数として使用します。

$ printf '%s\n' $(date +%B)
February

(はい、これは単に実行しても同じ出力が生成されるprintfため、操作された例ですが、どのように動作するかを示しています。)date +%B

角かっこ内のコマンドは、単一のプログラムから長いパイプラインコマンドまで、必要なだけ単純または複雑にすることができます。たとえば、私はDebianシステムから古いカーネルパッケージを削除するためにしばしば次のコマンドを使用します。

apt-get purge $(dlocate -k | grep '6\.0\.0-[245]')

ところで、バックティック(`)を使用するスクリプトも表示できます。これは従来の理由でサポートされていますが、新しいスクリプトでは使用しないでください。

と一緒に使用すると、シェルはeval出力を実行します。この場合、run は/opt/homebrew/bin/brew shellenvたとえば多くのテキストを返し、var=value現在のevalシェルで実行してその変数を希望の値に設定します。

help evalバッシュから:

eval:eval [arg ...]

パラメーターをシェルコマンドとして実行します。

ARGを単一の文字列に結合し、結果をシェルへの入力として使用し、結果コマンドを実行します。

終了ステータス:コマンドの終了ステータスを返すか、コマンドが空の場合は成功を返します。

/opt/homebrew/bin/brew shellenv単独で実行して、どの出力が生成されるかを確認してください。

答え2

Brewが動作するために必要な環境変数をエクスポートします。たとえば、なしで実行すると、evalFishシェルに次の結果が出力されます。

$ /opt/homebrew/bin/brew shellenv

set -gx HOMEBREW_PREFIX "/opt/homebrew";
set -gx HOMEBREW_CELLAR "/opt/homebrew/Cellar";
set -gx HOMEBREW_REPOSITORY "/opt/homebrew";
set -q PATH; or set PATH ''; set -gx PATH "/opt/homebrew/bin" "/opt/homebrew/sbin" $PATH;
set -q MANPATH; or set MANPATH ''; set -gx MANPATH "/opt/homebrew/share/man" $MANPATH;
set -q INFOPATH; or set INFOPATH ''; set -gx INFOPATH "/opt/homebrew/share/info" $INFOPATH;

その後、eval実際にsetコマンドを実行します。

セッションにすでにロードされている場合は何も出力されません。

関連情報