シェルスクリプトのパスにHomebrewを自動的に追加しようとしていますが、次の2行はシェルスクリプトで評価されません。
#!/bin/sh
eval "$(/home/linuxbrew/.linuxbrew/bin/brew shellenv)"
2番目のコード行は[home]brew
プログラムを実行します。議論shellenv
。複数の環境変数をエコーして設定し、評価します。最初の行は、単に2番目の行をすべてのシェルに設定されたmy ~/.profile
soのPATHに追加します。brew
このステートメントが私のシェルスクリプトでは機能しないことがわかりました。しかし、端末に入力すると、これが発生します。原因は何ですか?
シェルスクリプトからHomebrewをインストールした後に実行するように指示されたコマンドを実行してみましたが、同じ動作をしました。
エマルジョン:
答え1
スクリプトを実行すると、スクリプトが実行される呼び出し環境から継承されたローカル環境が作成され、スクリプトが終了すると最終的に破棄されます。
まず、「評価しない」と「動作しない」でbrew shellenv
スクリプトを実行すると、コマンドが何も出力しないように見えたので、環境を信頼したとします。スクリプトからHomebrewで使用するために正しく初期化されていません。 (注:この説明は、質問が追加の説明で更新されるまで正確ではない可能性があります。以下の区切り記号の後ろを参照してください。)
brew shellenv
必要な変数にまだ正しい値がない場合、このコマンドはHomebrewに適した環境変数を設定するシェルコマンドを出力します。
入手できるドキュメントには、brew help shellenv
このコマンドが実行する操作が正確に説明されています。以下はmacOSからのものですが、Linuxでも同様に読むことができます(ハイライトを追加)。
使用法:
brew shellenv
エクスポートレポートを印刷します。シェルで実行すると、このHomebrewインストールが、および
PATH
にMANPATH
追加されますINFOPATH
。変数
HOMEBREW_PREFIX
は複数回クエリしないようにエクスポートされますHOMEBREW_CELLAR
。HOMEBREW_REPOSITORY
等価性を確保するために、このコマンドは、Homebrewbin
とsbin
ディレクトリがそれぞれファイルの最初と2番目の場合、出力を生成しません。PATH
。このコマンドの出力の評価をドットファイル(たとえば~/.profile
、~/.bash_profile
または~/.zprofile
)に追加することを検討してください。eval "$(brew shellenv)"
PATH
上記のテキストで説明されているように、変数にすでにおよびディレクトリがbin
含まれている環境でスクリプトを実行できます。sbin
スクリプトが呼び出しシェルの環境を変更したい場合は、または.
を使用してスクリプトを実行する必要がありますsource
。これにより、ファイルのコマンドは次のようになります。現在の環境(これはまた行#!
が無視されることを意味します)。
この点については、以下も参照してください。