個人環境変数に同意する

個人環境変数に同意する

Unix個人環境変数を設定するルールはありますか?$HOME/.bash_profileその代わりに入れなければならないという内容を読みました$HOME/.bashrc。それにもかかわらず、私は独自の変数を区別する方法を提供することを検討しています。それで忘れても設定をしたのか一目でわかります。たとえば、端末でオートコンプリートを実行するときに、C++言語規則の1つと同様に、変数にアンダースコアまたはマイナス記号「m」で始まるようにすることができます。おそらく絶対的な答えはないということを知っていますが、これを達成するのに役立つかもしれないいくつかのベストプラクティスとルールを聞きたいです。つまり、システム環境変数と個人環境​​変数を簡単に区別する方法を提供します。

答え1

埋め込み環境変数を設定する場所環境変数を設定するための最良の distro/shell 独立した方法は何ですか?

命名に関して環境変数を設定する主な理由は、アプリケーションでそれを使用するため、名前を選択できないためです。

環境変数には名前空間の概念はありません。最も近い方法は通常、型のプレフィックスを選択することですSOMETHING_(つまり、プレフィックスはアンダースコアで終わり、変数SOMETHING_FOO、、SOMETHING_BAR...を持ちます)。ただし、ほとんどの変数は特定のアプリケーションに限定されず、さまざまなアプリケーションに適用されます。変数が1つのアプリケーション内でのみ意味がある場合は、通常コマンドラインオプションでなければなりません。したがって、名前空間はあまり必要ありません。

コマンドラインでのみ使用する変数を定義する場合は、環境変数を使用するのではなく、次のように使用してください。シェル変わりやすい。 (望むよりbashの環境変数とエクスポートされた環境変数の違い)シェルスクリプトで変数を定義して使用しない場合、exportこれは環境変数ではなくシェル変数であり、定義したシェルでのみ表示されます。したがって、コマンドラインで使用する変数を定義する場合:

  • シェル対話型開始ファイル(~/.bashrcbash、~/.zshrczsh、~/.config/fish/config.fishfishの場合)で定義します。
  • それをしないでくださいexport
  • 一般的なルールがあります。環境変数はすべて大文字で、シェル変数はすべて小文字です。

使用している環境変数と競合しない限り、目的の名前を選択してください(環境変数は自動的にシェル変数にインポートされます)。最初は下線を使用しないことをお勧めします。これは、下線が bash および zsh 完成システムで内部的に使用されるためです。

答え2

以下は、環境を設定する場所の推奨事項と説明です。

関連する詳細は次のとおりです。

  • ユーザー構成ファイルはい~/.bash_profile、、、~/.bash_loginまたは~/.profile。最後のシェルが他のシェルと重なるので、最初の2つのうちの1つを使用することをお勧めします。ただし、最後のGUIログインに関する注意事項を参照してください。

  • ユーザー.rc ファイルはい~/.bashrc

  • 一つ対話型ログインシェル(たとえば、コンソールログインまたはsshログイン)は設定ファイルのみを読み取ります。

  • 非対話型ログインシェルまれですが、GUIログイン中に実行される可能性があります。どちらもBashシェルの場合は非対話型ログインシェルとして機能し、設定ファイルのみを読み込みます。

  • 一つ対話型非ログインシェル(例:XTerm / Konsoleの新しいタブ)はrcファイルを読み込みます。

  • 非対話型非ログインシェル(例:シェルスクリプト)1つの重要な例外を除いて、両方が読み取られません。で始まると、sshrcファイルを読み込みます。

関連する例外の理由sshは、ssh()を介してスクリプトを実行したときにローカルスクリプトを実行したときと同様に、ssh $host my_remote_script環境が(ほとんど)まだ設定されていないためです。したがって、IMOでは、ローカルに呼び出されたスクリプトとリモートで呼び出されたスクリプトが同じ環境を使用するようにPATH環境を設定しようとする動機は例外です。~/.bashrc

これらすべてに基づいて、私のアドバイスは次のとおりです。

  • 構成ファイル:

    • PATH.
    • 無条件にrcファイルをインポートします. ~/.bashrc
  • RCファイル:

    • 必要に応じて環境変数を設定します。
    • このファイルは、環境が設定されると(対話型の非ログインシェルを介して)取得されます。だから無条件にこれを行うと、2回購入後に結果が出る可能性PATH=$HOME/bin:$PATHがありますPATH=$HOME/bin:$HOME/bin:...(これはバグではなく面倒です)。簡単な回避策は、環境設定を保護することです。

      # ~/.bashrc
      if [ ! "${MY_ENV_SET:-}" ]; then
          PATH=...
          ...
          export MY_ENV_SET=1
      fi
      
    • 対話型シェルに対してのみシェルの詳細を定義します。

      ...
      [ "$PS1" ] || return 0
      PS1=<fancy_colored_prompt>
      source ~/.bash_alias
      eval $(dircolors -b ~/.dircolors)
      source /etc/bash_completion
      

グラフィックログイン。考慮すべき最後の重要な点は、PATH起動時にGUIがどのように設定されるかです。これ可能これはBashを使用したり使用したりすることなく行うことができます。私の場合はKDEを使用し、起動中にこのファイルを取得します。

# ~/.kde/env/path.sh
# https://userbase.kde.org/Session_Environment_Variables
PATH=$(env -i /bin/bash -lc 'echo $PATH')

これは、rcファイルのソースでもある空の環境を使用して(まれに)非対話型ログインBashシェルを呼び出し、すべてが一貫しています。

別のGUI(Gnome?)を使用している場合は、PATH起動中にこれがどのように設定されているかを確認する必要があります。 GUIがソースの場合は、~/.profileそこからrcファイルもインポートする必要があります。

関連情報