%22%20%E3%82%B3%E3%83%9E%E3%83%B3%E3%83%89%E3%81%AF%E5%AE%9F%E9%9A%9B%E3%81%AB%E4%BD%95%E3%82%92%E3%81%97%E3%81%BE%E3%81%99%E3%81%8B%EF%BC%9F.png)
Homebrewは私たちeval $(/opt/homebrew/bin/brew shellenv)
に~/.zprofile
。
私はシェルスクリプトに初めて触れました。私は$var
varという変数を参照することを知っていますが、それはすべてです。パスを入れるとはどういう意味ですか$()
?ここに別の主張がありますが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が動作するために必要な環境変数をエクスポートします。たとえば、なしで実行すると、eval
Fishシェルに次の結果が出力されます。
$ /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
コマンドを実行します。
セッションにすでにロードされている場合は何も出力されません。