Bashスクリプトでは、コマンド出力の評価が機能しません。

Bashスクリプトでは、コマンド出力の評価が機能しません。

シェルスクリプトのパスにHomebrewを自動的に追加しようとしていますが、次の2行はシェルスクリプトで評価されません。

#!/bin/sh
eval "$(/home/linuxbrew/.linuxbrew/bin/brew shellenv)"

2番目のコード行は[home]brewプログラムを実行します。議論shellenv。複数の環境変数をエコーし​​て設定し、評価します。最初の行は、単に2番目の行をすべてのシェルに設定されたmy ~/.profilesoのPATHに追加します。brew

このステートメントが私のシェルスクリプトでは機能しないことがわかりました。しかし、端末に入力すると、これが発生します。原因は何ですか?

シェルスクリプトからHomebrewをインストールした後に実行するように指示されたコマンドを実行してみましたが、同じ動作をしました。

エマルジョン:

答え1

スクリプトを実行すると、スクリプトが実行される呼び出し環境から継承されたローカル環境が作成され、スクリプトが終了すると最終的に破棄されます。

まず、「評価しない」と「動作しない」でbrew shellenvスクリプトを実行すると、コマンドが何も出力しないように見えたので、環境を信頼したとします。スクリプトからHomebrewで使用するために正しく初期化されていません。 (注:この説明は、質問が追加の説明で更新されるまで正確ではない可能性があります。以下の区切り記号の後ろを参照してください。)

brew shellenv必要な変数にまだ正しい値がない場合、このコマンドはHomebrewに適した環境変数を設定するシェルコマンドを出力します。

入手できるドキュメントには、brew help shellenvこのコマンドが実行する操作が正確に説明されています。以下はmacOSからのものですが、Linuxでも同様に読むことができます(ハイライトを追加)。

使用法:brew shellenv

エクスポートレポートを印刷します。シェルで実行すると、このHomebrewインストールが、およびPATHMANPATH追加されますINFOPATH

変数HOMEBREW_PREFIXは複数回クエリしないようにエクスポートされますHOMEBREW_CELLARHOMEBREW_REPOSITORY等価性を確保するために、このコマンドは、Homebrewbinsbinディレクトリがそれぞれファイルの最初と2番目の場合、出力を生成しません。PATH。このコマンドの出力の評価をドットファイル(たとえば~/.profile~/.bash_profileまたは~/.zprofile)に追加することを検討してください。eval "$(brew shellenv)"

PATH上記のテキストで説明されているように、変数にすでにおよびディレクトリがbin含まれている環境でスクリプトを実行できます。sbin


スクリプトが呼び出しシェルの環境を変更したい場合は、または.を使用してスクリプトを実行する必要がありますsource。これにより、ファイルのコマンドは次のようになります。現在の環境(これはまた行#!が無視されることを意味します)。

この点については、以下も参照してください。

関連情報