web-dev-qa-db-ja.com

ログインシェルとしてbashを開始するようにgnome-terminalを構成します。.bashrcを読み取りません

RVMとgnome-terminalの統合 を試みています。

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

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

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

23
Arturo Herrero

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

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

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

詳細については、 スタートアップファイルに関するbashマニュアル を参照してください。

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


用語の説明:

  • 対話型シェルは、対話できるシェルです。つまり、コマンドを入力できます。使用するほとんどのシェルは、対話型シェルです。
  • 非対話型シェルは、対話できないシェルです。シェルスクリプトは、非対話型シェル内で実行されます。
  • login Shellは、システムにログインするときに起動されるシェルです。
  • non-loginシェルは、ログインプロセスの後に開始されるシェルです。

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

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


通常、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

~/.bashrcにbash固有のものと~/.profileにbash固有のものを配置する必要があります。たとえば、PATH~/.profileに入り、HISTCONTROL~/.bashrcに入ります。

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

37
lesmana

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

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

  1. 編集-> プロファイル設定に移動します。

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

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

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

おそらく、このオプションにより、-lオプションがシェルに渡される可能性があります。

9
Guest

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

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

# Get the aliases and functions
if [ -f ~/.bashrc ]; then
    . ~/.bashrc
fi
0
Rob Prentice

私は同じ質問を持っていて、解決策を見つけました:実際のログインシェルに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.実際のログインシェルのためにローカルホストに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
Michael Franzl