web-dev-qa-db-ja.com

Linuxの新しいセッションでBashが「.profile」をロードしない

IT部門から入手した新しいLinuxマシンをセットアップしていて、.profileは、新しいターミナルセッションを開始するときに読み込まれません。現在のシェルは Bash ですが、デフォルトの sh から変更しました。どうやってロードさせるの_.profile 始めるとき?

[〜#〜] ssh [〜#〜] を介してシェルにアクセスします:ssh [email protected]。管理者権限を持っています。

24
sa125

Bashが対話型ログインシェルとして起動すると、ファイルの1つmayプロセスは~/.profileになります。

対話型の非ログインシェルとして起動すると、起動しません。 /etc/bash.bashrc(Bashのバージョンでそのファイルまたは同様のファイルが有効になっている場合)と~/.bashrcを処理します。

以下を~/.bashrcに追加できます(ただし、ループや値が誤って変更されることに注意してください)。

. $HOME/.profile

シェルの起動方法によって異なります。他の人が言ったように、ログインシェルはあなたのプロファイルをロードします(最初に.bash_profileを探し、次に.profileを試します)。これらのいずれかが見つかると、ロードされます。非ログインシェル(インタラクティブまたは非インタラクティブ)は、.bashrcをソースとします。

すべてを.bashrcに入れることをお勧めします。 .profile/.bashrc分割は一種の恣意的であり、ttyが単なるデバイス名ではなく実際のTeleTypeを意味していたUNIXの昔の時代には、より理にかなっています。サーバーへの「メイン」ログインで特定のこと(メールのチェックなど)を開始し、他のシェルの通常のセットアップを開始することを意図していた。ほとんどのLinuxでログインします。グラフィカルインターフェイス(KDE、gnome、CDE 'shudder')にログインしているため、実際にはシェルにログインしていません。 「spawnログインプロセス」は、セッションマネージャーによって処理されます。現在はあまり重要ではありません。

私の提案:.profileを次のもののみで構成する:

[ -f $HOME/.bashrc ] && . $HOME/.bashrc

.bashrcの最初の行として、bashスクリプトを実行するときに奇妙なことが起きないように、早めにジャンプアウトしてください。

[[ $- != *i* ]] && return
16
Rich Homolka