ログインシェルとしてbashを起動するようにgnome-terminalを設定します。.bashrcを読み取りません


24

RVMとgnome-terminal統合しようとしています。

デフォルトでは、gnome-terminalはbashをログインシェルとして起動しません。この回答でrun command as a login shell提案されているように、RVMをセットアップする同じトピックについて有効にしましたが、これを行うと.bashrcファイルが読み込まれません。

たとえば、環境変数を作成して.bashrcから、新しいgnome-terminalを起動するとそれを読み取ることができません。source .bashrcファイルを読み取るには明示的に実行する必要があります。

これは予想される動作ですか?

回答:


38

はい、それは予想される動作です。

動作は、要するに次のとおりです。

  • bashは対話型ログインシェルとして開始しました:読み取り ~/.profile
  • bashは対話型の非ログインシェルとして開始しました:読み取り ~/.bashrc

読むスタートアップファイルに関するbashのマニュアルを詳細については。

個人的には、この振る舞いは奇妙であり、この設計決定の合理化はまだ見つかっていないと思います。


用語の説明:

  • 対話型シェルは、あなたが、あなたはそれにコマンドを入力することができることを意味し対話することができるシェルです。使用するほとんどのシェルは、対話型シェルです。
  • 非対話型シェルは、あなたが対話できないとのシェルです。シェルスクリプトは、非対話型シェル内で実行されます。
  • ログインシェルは、あなたのシステムへのログイン時に起動されるシェルです。
  • 非ログインシェルは、ログインプロセスの後に開始されたシェルです。

表示されるほとんどのシェルは、対話型の非ログインシェルです。これは、gnomeが「ログインシェル」であるため、gnomeのようなグラフィカル環境を実行している場合に特に当てはまります。gnome内で開始されるbashセッションは、非ログインシェルです。実際の対話型ログインシェルを表示する場合は、仮想コンソールにアクセスし(を使用Ctrl+Alt+F1)、ユーザー名とパスワードを使用してログインします。これは、実際の対話型ログインbashシェルです。を使用してグラフィカルシェルに戻ることができCtrl+Alt+F7ます。

--loginログイン後にbashをログインシェルのように動作させるオプションがあります。ログインシェルとしてbashを起動するようにgnome-terminalを設定すると、その--loginオプションを使用してbashが起動します。


通常、bashは常に~/.bashrc対話型シェルで読み取ります。これを行うことをお勧めします。

~/.bash_profileファイルを作成します。ログインシェルとしてbashを起動した場合、検索する~/.bash_profile前にまず検索し~/.profileます。bashが検出~/.bash_profileすると、読み取りは行われません~/.profile

に次の行を追加します~/.bash_profile

[ -f "$HOME/.profile" ] && source "$HOME/.profile"
[ -f "$HOME/.bashrc" ] && source "$HOME/.bashrc"

bashが対話型ログインシェルとして起動された場合、次のファイルを読み取ります。

  1. ~/.bash_profile
  2. ~/.profile
  3. ~/.bashrc

また、bashが対話型の非ログインシェルとして起動された場合:

  1. ~/.bashrc

にbash固有の要素と、bash固有で~/.bashrcはない要素を配置する必要があり~/.profileます。たとえば、PATH入っ~/.profileHISTCONTROL行き~/.bashrcます。

~/.profilebash固有ではないことに注意してください。他のテキストベースのシェル(shやkshなど)やグラフィカルシェル(gnome)も読み取ります~/.profile。そのため、bashに特定のものを入れるべきではありません~/.profile


1
+1。おかげで、これは私を壁に追いやっていました... :
richsage

1
mywiki.wooledge.org/DotFilesは、なぜそうなのかの歴史を説明しています。ただし、rvmでこの問題が発生する主な理由は、rvmがコードを配置することです。これ~/.bashrcは、最初にプロファイル内に配置することを意図しています。障害はrvmにあります。
ガイラ

@geirhaあたり、それらは使用している必要があります~/.profile
sanmai

その理由は、プロファイルスクリプトが、.bashrc実行する必要があるものに対する相対的な評価を制御できるからです。対話型シェルが常に読み取る場合、.bashrcそれは前または後.profileですか?何あなたがいくつか設定したい場合は.bashrcどの.profile付与にかかるの?そして同時に、あなたはいくつかのものを.bashrcセットアップしたものに依存させたいですか.profile?どちらのロード順序も両方のシナリオを満たしません。
カズ

11

これは、悪い設計決定でも、バグでも、シェルやターミナルの予想される動作でもありません

これは、Gnomeターミナルのプロファイルごとの構成オプションの不幸なデフォルト値に過ぎず、簡単に修正できます。

  1. 移動し、編集 - > [ プロファイル設定

  2. [ タイトルとコマンド ]タブを選択します。

  3. [ ログインシェルとしてコマンドを実行]チェックボックスがオフになっていることに注目してください。確認してください。

それでおしまい。Defaultプロファイル、または新しい端末を作成するときに使用するように構成されているプロファイルに対してこれを行うと、ログインシェルが取得されます。

おそらく、このオプションによって、-lオプションがシェルに渡される可能性があると推測しています。


0

私は同じ質問を持っていて、解決策を見つけました:実際のログインシェルにSSHを使用するだけです!

1.スーパーユーザーとして、完全に分離するために専用のrvmシステムユーザーを作成し、パスワードを割り当てます。

sudo su

useradd -m rvmuser

passwd rvmuser

2. rvmがスーパーユーザーのパスワードを要求せずにルビーを構築できるように、依存関係をインストールします。

apt-get install curl gawk libreadline6-dev libssl-dev libyaml-dev libsqlite3-dev sqlite3 autoconf libgdbm-dev libncurses5-dev automake bison libffi-dev

3. localhostにSSHでログインして、実際のログインシェルを作成します(必要になる場合がありますapt-get install ssh

ssh rvmuser@localhost

4. rvmをインストールします

\curl -sSL https://get.rvm.io | bash -s stable

5.すべてのrvm関数がロードされるように、ログアウトして再度ログインします

exit

ssh rvmuser@localhost

6. rvmを使用します:)


0

.bash_profileログイン時にbashによってのみ読み取られるプロファイル初期化を配置するためにbashを使用する場合は一般的ですが、他のシェルは歴史的に共有してい.profileます。これにより、bash固有のコマンドをに配置できます.bash_profile

で定義されているエイリアスを取り込むには、一般的に次の使用が行われます.bashrc

# Get the aliases and functions
if [ -f ~/.bashrc ]; then
    . ~/.bashrc
fi
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.