歴史的に、プロファイルファイル(/etc/profile
および~/.profile
)は、ログイン時に呼び出され(テキストコンソールで他に何ですか?)、多くの目的を果たしました。
- セッションの環境変数およびその他のパラメーター(umaskなど)を設定します。
- セッションの開始時に追加のプログラムを実行します(Eメール通知など)。
- シェルとは異なる場合(たとえば、別のシェルまたはXウィンドウ)、セッションのプログラムを実行します。
- 端末パラメータを設定します(例:)
stty
。
- シェルパラメータ(エイリアスなど)を設定します。
これらの目的はすべて、後でないと個別に識別されませんでした。プロファイルスクリプトは、対話型セッション(端末の対話、他のプログラムの起動)でのみ意味のあることを行う可能性があるため、リモートシェル呼び出し(rsh)が導入されたとき、rshの作成者はリモートシェルをログインシェルとして呼び出さないことを決定しました。プロファイルスクリプトが実行されないようにします。(一部のバージョンのにrshd
は、リモートシェルをログインシェルとして実行するオプションがあります。)Sshは、rshのドロップイン置き換えとなるようにこの動作をコピーしました。
プロファイルスクリプトを実行する場合は、スクリプトを明示的に呼び出すことができます。
ssh 127.0.0.1 '. /etc/profile; . ~/.profile; ydisplay'
.
シェル内でプロファイルスクリプトをロードするコマンドに注意してください。これらは、外部プログラムではなく、シェル内で実行されるコマンドです。
すべてのユーザーに対してグローバルに環境変数を設定する場合、多くのシステムで別の方法があります。それを/etc/profile
で定義する代わりに、で定義し/etc/environment
ます。このファイルはpam_env
モジュールを通じて読み込まれます。ほとんどのLinuxディストリビューションは、それを読み取るように設定されています。
ログインシェルがbashの場合は、さらに可能性があります。通常、環境変数はに設定しない.bashrc
でください(インタラクティブシェルを使用して端末を経由する場合を除いて、Xセッションでは設定されません。テキストコンソールまたはそれ以上でインタラクティブにログインした場合は設定されないためです。 ssh(別のプログラム内でシェルを呼び出すと、カスタム設定が上書きされるため)。ただし、bashには私が理解したことのない奇妙な機能があります。これ~/.bashrc
は、2つの無関係な状況で読み取られます。
- ログインシェルではないインタラクティブシェル。
- ログインシェルではない非インタラクティブシェルで、bashが
rshd
or によって呼び出されたと判断した場合sshd
。
sshでコマンドを実行すると、2番目のケースになります。を読んだり/etc/profile
、.profile
からプロフィールを読んだりすることができます.bashrc
。次のコードをに含めます~/.bashrc
。
case $- in
*i*) :;; # this is an interactive shell, fine
*) # This is not an interactive shell! This must be a non-interactive remote shell session.
. /etc/profile; . ~/.profile
return;;
esac
ydisplay
ですか?動作しssh 127.0.0.1 /usr/app/cpn/bin/ydisplay
ますか?