RVMとgnome-terminalの統合 を試みています。
デフォルトでは、gnome-terminalはログインシェルとしてbashを起動しません。 この回答 で提案されているrun command as a login Shell
を有効にして、RVMをセットアップする同じトピックについて説明しましたが、これを行うと.bashrc
ファイルが読み込まれません。
たとえば、.bashrc
に環境変数を作成してから、新しいgnome-terminalを起動したときに読み取ることができません。ファイルを読み取るには、source .bashrc
を明示的に実行する必要があります。
これは予想される動作ですか?
はい、それは予想される動作です。
動作は、要するに次のとおりです。
~/.profile
を読み取ります~/.bashrc
を読み取ります詳細については、 スタートアップファイルに関するbashマニュアル を参照してください。
個人的には、この振る舞いは奇妙であり、この設計決定の合理化はまだ見つかっていないと思います。
用語の説明:
表示されるほとんどのシェルは、対話型の非ログインシェルです。これは、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が対話型ログインシェルとして起動された場合、次のファイルを読み取ります。
~/.bash_profile
~/.profile
~/.bashrc
また、bashが対話型の非ログインシェルとして起動された場合:
~/.bashrc
~/.bashrc
にbash固有のものと~/.profile
にbash固有のものを配置する必要があります。たとえば、PATH
は~/.profile
に入り、HISTCONTROL
は~/.bashrc
に入ります。
~/.profile
はbash固有ではないことに注意してください。他のテキストベースのシェル(shやkshなど)やグラフィカルシェル(gnome)も~/.profile
を読み取ります。 ~/.profile
にbash固有のものを入れてはいけないのはそのためです。
これは、悪い設計決定でも、バグでも、シェルやターミナルの予想される動作でもありません
これは、Gnomeターミナルのプロファイルごとの構成オプションの不幸なデフォルト値に過ぎず、簡単に修正できます。
編集-> プロファイル設定に移動します。
タイトルとコマンドタブを選択します。
コマンドをログインシェルとして実行するチェックボックスがオフになっていることに注目してください!確認してください。
それでおしまい。 Default
プロファイル、または新しい端末を作成するときに使用するように設定されているプロファイルに対してこれを行うと、ログインシェルが取得されます。
おそらく、このオプションにより、-l
オプションがシェルに渡される可能性があります。
ログイン時にbashによってのみ読み取られる.bash_profile
にプロファイルの初期化を配置するためにbashを使用する場合は一般的ですが、他のシェルは歴史的に.profile
を共有しています。これにより、bash固有のコマンドを.bash_profile
に配置できます。
.bashrc
で定義されているエイリアスを取り込むには、一般的に次の使用が行われます。
# Get the aliases and functions
if [ -f ~/.bashrc ]; then
. ~/.bashrc
fi
私は同じ質問を持っていて、解決策を見つけました:実際のログインシェルに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を使用します:)