2017-03-09 16 views
0

これは私にはっきりしていると私のシステムのためにきちんとしているかどうかはわかりません。私はエイリアスとパスを格納できる〜/ .zhrcファイルを知っていますが、今日はBREW経由でノードをインストールした後、これを置くように求めました:export PATH = "$ HOME/.npm-packages/bin:$ PATH"私の〜/ .bash_profileファイルには存在しません。したがって、私のシステムをきれいに保つために私は元のファイルに入れましたが、emacsは苦情を申し立てました。さて、私はそれを削除し、〜/ .bash_profileに作成した後に置いた。両方ともホームディレクトリに置いても構いませんか?ファイル:bash_profile zhrc confusion

+0

〜/ .zshrcを意味しますか?あなたのホームディレクトリに〜/ .zshrcと〜/ .bash_profile(と〜/ .bashrc)ファイルを置くことができますが、あなたのシェルにzshを使っているなら、〜/ .bash_profileに入れたものは差をつけるemacsが〜/ .zshrcに入れたときに何の不満があったのですか? – Nick

答えて

0

が正確かより良い答えを出すためには、エラーメッセージや警告メッセージの正確な表現をemacsから取得する必要があります。しかし、私は を推測し、あなたが得る警告がexec-pathパッケージから来たと仮定します。

このパッケージには無効なチェックがあり、 に正しいinitファイルで変数が定義されているかどうかを確認します。一般的に

、ほとんどのシェルには、2つの設定ファイルの種類

  • 起動をサポートしたり、initが
  • インタラクティブシェルの初期化ファイル

差がファイルが供給されていたときにどのくらいの頻度かであるがファイルログイン(ロードされた)。 の違いを理解するには、シェルがいつ実行されるのかを理解する必要があります。 各シェル間の関係。私はさまざまなレベルの高いレベルを提供しようとします あなたが実際に使用している特定のシェル のマニュアルページを読むべきです。

環境をシェルプロセスのツリーと考えてください。 システムにログインすると、ログインシェルが作成されます。このシェルは、あなたが作成する他のすべてのシェルの親になります( )。コマンドを実行するたびに、新しいシェル で実行されます(これは100%正確ではありませんが、正確には ポイントを説明するのに十分です)。したがって、端末を開くと、別のシェルが実行されます。このシェルは、ログインシェル の子です。さまざまなコマンドを実行すると、新しい シェルが作成され、シェル内でそのコマンドが実行されます。これらはすべてあなたの 親ログインシェルの子です。シェルの中には短時間しか存在しないものもあり(コマンド実行には という長い時間がかかります)、他のシェルは数時間、数日またはおそらく 週間続くことがあります(emacsが動作しているシェルなど)。

重要な点は、子シェルが親シェルからさまざまな 設定を継承することです。一部の変数の 前面に表示される 'export'コマンドの考え方は、実際にはシェルにコマンドを送信して、子シェルに変数 をエクスポートするように指示します。我々は

export PATH=/usr/local/bin:/usr/bin:/bin 

のようなラインを持っている場合たとえば、私たちが実際にやっていることは私たちは、常にいくつかの変数が子供に をリセットする必要があるとして、変数をエクスポートする必要はありません

PATH=/usr/local/bin:/usr/bin:/bin # set the variable 
export PATH # make it available in child shells 

ですシェルそのもの。たとえば、プロンプト文字列を保持する変数。 プロンプトに現在の ディレクトリ、日付または時刻などの動的コンポーネントを使用する場合は、この変数をログイン親シェル にのみ定義することはできません。これらのタイプの変数は、シェルが作成されるときに、それぞれ シェルで定義されます。

これを処理するために、シェルには2つの異なるinitファイルがあります。ログイン初期化ファイル は、親シェルのためだけに用意されており、すべての子シェルに共通の変数 を設定する場合に特に便利です。シェル単位の初期化ファイルは、新しいシェルごとにソース化された であり、シェルが起動するたびに を更新または変更する必要がある設定に最適です。 あなたがログアウトしたりシステムをログオフしたり、エイリアス定義を入れるなど、他の特別な目的のために使用できる他のシェル 設定ファイルもあります。

いつか、 のように変数を置いたときの大きな違いは、これらのinitファイルをソースにしたときのパフォーマンスです。シェル単位の初期化ファイル が大きすぎてリソースが多すぎると、 環境全体のパフォーマンスが影響を受ける可能性があります。最近の処理速度の向上のために、これは主に最近の問題ではありません。残念なことに、多くの人が が異なるシェル構成 ファイル間の役割と関係を理解し​​ていないため、値が設定される に関する誤った情報や誤解を招く情報が多数あります。人々はしばしば変数を(bash__profile =に設定しなければならない場合に)( の例では)bashrcに設定するようアドバイスします。混乱は で、部分的にはbashrcに変数を追加できるという事実によって引き起こされます。 をテストすると(通常はテストで新しい子シェルがforkされるため)、 をあなたのbash_profileに置くと、次のログイン。

プラットフォームの相違もありますが、少しだけ小さくなります たとえば、OSXでは、実際には/ etcディレクトリに特別なファイルがあります。そこには追加のパスコンポーネントを追加する必要があります(私はMacではなく、 ですが、これは/ etc/pathsやパスごとのものですコンポーネントファイルは /etc/path.dです)。これは、あなたのログインシェルの子プロセスである のプロセスとして、Dockのようなデスクトッププロセスが確実に実行されるように、パスを設定するグローバルな場所を持つように行われます。

一般的なルールとして、ほとんどの変数は時間に依存して変化する 動的コンテンツ、すなわちコンテンツを持っているプロンプトまたは他の変数に関連する変数の 除いて、ログインプロファイルに行くことができますが、ディレクトリ 場所または他のシェルに固有の対話型アクションのトラッキング インスタンス。

パスの設定(上記のOSの違いに注意してください)は、 のプロファイルまたはログイン設定ファイルに入ります。 bashでは、これは.bash_profileであり、zshでは です。通常は.zprofileです。 bashが最も一般的なシェルになっているので、 のドキュメントなどは、多くの場合、.bash_profileに物事を追加するよう勧めています。 zshを実行している場合は、.zprofileを使用して同じ情報を追加します。

あなたはa.bash_profileを持っていないが、zshrcファイルを持っていると言ったので、私は あなたのログインシェルとしてbashではなくzshを実行していると仮定します。これは の場合です。そのパス設定をご家庭の ディレクトリにある.zprofileに追加する必要があります。 exec-pathパッケージは、パス変数を設定する正しい場所ではない zshrc/bashrcに追加したために不平を言っています。 がOSXで動作している場合は、実際には/ etcにある正しいファイルへのパスを追加する必要があります。 ファイル名を覚えていないため、OSXのドキュメントをチェックする必要があります。

+0

ありがとう、それは非常に細心の応答です。私は/ etc/pathsファイルにPATHの変数を追加しました。これは、MacOSのネイティブではなくemacsの代わりにBrewパッケージを使用するために、以前に他のパス設定を変更していたためです。注意点や苦情はなく、正常に機能しているようです。 – KonVas