UbuntuでBashをデフォルトシェルにするには?
ホームディレクトリに.bash_profile
があるのですが、ログイン時に実行されません。以下のようにすると、期待通りになります:
ssh myhost
bash
source ~/.bash_profile
しかし、通常はログイン時にすべて実行されます。どう思いますか?
ホームディレクトリに.bash_profile
があるのですが、ログイン時に実行されません。以下のようにすると、期待通りになります:
ssh myhost
bash
source ~/.bash_profile
しかし、通常はログイン時にすべて実行されます。どう思いますか?
akiraさんの回答の上に、 /etc/passwd ファイルを編集してデフォルトシェルを指定します。
john:x:1000:1000:john,,,:/home/john:/bin/sh
最後にシェルが指定されているので、この例のような行が出てきます。
ターミナルプログラムを確認してみてください。bin/bash
Bash はログインセッションのみ .bash_profile を実行するように設定されているかもしれません。.bashrc はログインセッションだけでなく、すべての bash セッションで実行されます。.bash_profile を .bashrc からソースを取るか (循環的な依存関係を避けてください!)、ターミナルプログラムをシェルプログラムとして /bin/bash -l を実行するように設定してみてください。
もし、/etc/passwdファイルに自分のユーザ名が表示されていない場合(IT企業などで他のドメインの管理下にある場合など)、以下のようにchsh
オプションで「ユーザが見つかりません」と表示されている場合は、以下のようにしてみると良いかもしれません。
以下のトリックのロジック -> Ubuntuでは、/bin/shがダッシュになっています。これをbashに変更することができます。Ubuntuでは、/bin/shはdashへのシンボリックリンクです。
sudo dpkg-reconfigure dash
を実行し、Noを押すとbashに切り替わります。
さて、「Terminal–Edit–preferences–Command」で、ステートメント
Run command as login shell
これで完了です。
シェルをデフォルトのシェルにするには、まず、/etc/shells
の内容を見て、そのシェルがコンピュータにインストールされ、認識されていることを確認します。
$ cat /etc/shells
# /etc/shells: valid login shells
/bin/sh
/bin/bash
/usr/bin/bash
/bin/rbash
/usr/bin/rbash
/bin/dash
/usr/bin/dash
/usr/bin/fish
次に、chsh
を使用してシェルを変更します:
$ sudo chsh -s /usr/bin/bash $(whoami) # or sudo chsh -s /bin/bash $(whoami)
あなたの質問には十分な情報がないので、はっきりとしたことは言えませんが、以前にも同じ問題にぶつかったことがあります。パスワード入力で /bin/bash が既に設定されていると仮定すると、ターミナルの起動方法に問題があるかもしれません。
GUI 端末を起動しようとしている場合、例えば gnome-terminal
のような場合、シェルが bash のスタートアップファイルを読み込んでくれると期待しているかもしれません。しかし、Ubuntuや他のシステムではデフォルトではこのようなことは起こりません。
私がUbuntuで修正した方法は、gnome-terminalの環境設定を編集して、起動コマンドをbash -l
に設定することです。-l
は--login
の略です。これは bash をログインシェルとして起動するように指示するもので、ssh 経由でログインしたときと同じように起動スクリプトを読み込むようになります。
これがこのような方法であることには正当な理由があると思いますが、私は linux、cywgin、macos システムで同じプロファイルを共有しているので、これには驚きましたし、少々イライラさせられました。