.bashrcはパスをエクスポートしませんか?

.bashrcはパスをエクスポートしませんか?

企業クラスタにログインするたびにKerberosチケットを受け取り、ジョブを送信しようとしましたが、Spark-ubmitが見つかりません。

-bash-4.1$ ./pipeline.runtime/scripts/vpspark-submit.sh crow-env/ /user/gsamaras/crow_spm-1.0.2.3.tar.gz --properties-file $SPARK_CONF_PROPERTIES --num-executors 1 foo.py 
./pipeline.runtime/scripts/vpspark-submit.sh: line 51: spark-submit: command not found

しかし、.bashrcを取得すると正常に動作します。

>> cat .bashrc
[ -f /etc/bashrc ] && . /etc/bashrc
export PATH=${SPARK_HOME}/bin:$PATH
export SPARK_CONF_DIR=~/tripodrt-spark/conf/
export SPARK_CONF_PROPERTIES=~/tripodrt-spark/conf/spark-overrides-tt.conf

なぜ?ログイン時に.bashrcを実行したいと思います。私はRed Hat Enterprise Linuxを使用しています。

ベストアンサー1

bashマニュアルから:

ログインシェルではなく対話型シェルを起動したときにファイルが存在する場合は、bash コマンドを読み込んで実行します。~/.bashrc

したがって、シェルがログインシェルの場合は~/.bashrc読み取れません。

PATH代わりに何かを追加したり、そこからインポートしたりすることも~/.bash_profileできます。~/.bashrc

一部のシェルは、2 つまたは 3 種類のシェル初期化ファイルを区別します。

  1. 輪郭ログインシェルから読み取ったファイルです。
  2. 対話型シェルから読み取ったファイルです。
  3. 非対話型シェル(スクリプトなど)から読み取ったファイルです。

のためbash

  1. ~/.bash_profile
  2. ~/.bashrc
  3. $BASH_ENVファイルが何を指しているかは関係ありません。

分離点輪郭対話型シェルから読み取ったスクリプトの起動スクリプトを使用すると、将来のすべてのシェルセッションに対して(潜在的に重い)操作を一度に設定できます。これには通常、エクスポートされた他のPATH変数(環境変数など)も一緒に設定することが含まれます。

インタラクティブシェル初期化スクリプト(~/.bashrc場合bash)は、インタラクティブシェルで特に必要な操作を実行するだけです。これには、エクスポートしないシェル変数の設定PS1、エイリアス、関数定義などが含まれます。また、このセッションとこのセッションで実行されるプロセスに設定する必要がある環境変数を設定する必要があります(たとえば、GPG_TTYGnuPGGPG_TTY="$(tty)"を使用している場合など)。

source $HOME/.bashrc私は希望の方法で設定を~/.bash_profile設定して調整し、履歴ファイル変数、プロンプト、エイリアス、機能などを設定する傾向があります。 (これは半分嘘です。PATHumask~/.bashrcPS1PAGEREDITOR実際に exec自分のプロフィールでシェルが見つかったら、続行しksh93ますbash。私もレニス私のシェルは対話型シェル初期化ファイル(renice -n 4 $$)にあります。私は私よりも多くのCPUを必要とする多くの人と共有コンピュータで頻繁に作業するからです(しかしそれは私です)。

シェルksh93の使用

  1. ~/.profile
  2. ~.kshrc(または$ENVそれを指すものは何でも)

ksh93bashインタラクティブなログインシェルのようなものがあることを知っているよりも少し健全に$ENV説明します~/.profile

シェルはpdkshまた、~/.kshrc私を迷惑にする非対話型シェルも読みます(そして私が使用しているいくつかの重要なスクリプトを破ります)。

case $- in
    *i*)    ;;
    *)      return      ;;
esac

私のファイルの上に~/.kshrc

おすすめ記事