web-dev-qa-db-ja.com

chshコマンドでシェルを変更できないのはなぜですか?

このコマンド:chshは説明したように動作しないため、少なくとも私は新しいコマンドを学びました。

次のように機能すると説明されています。

  1. cat /etc/shells知っておくべきことは、どのシェルがインストールされているかを知るためです。
  2. echo $Shellを実行して、使用しているシェルを確認します。
  3. シェルの1つを選択し、chsh -s /path/to/Shellと入力します
  4. パスワードを入力し、echo $Shellを使用して、新しいシェルにいることを確認します。

これを実行しましたが、パスワードの入力時にエラーメッセージは表示されませんでしたが、同じシェルにいました。

% echo $Shell
/bin/bash
% cat /etc/shells
# /etc/shells: valid login shells
/bin/sh
/bin/dash
/bin/bash
/bin/rbash
% chsh -s /bin/sh
Password: 
% echo $Shell
/bin/bash
12
sharkant

ログアウトして、再度ログインします。

chshコマンドは/etc/passwdファイルを更新しますが、現在のシェルのcurrentシェルも$Shell変数の値も変更しません(それはそれを行う方法はありません)。これが、再度ログインする必要がある理由です。変更を有効にするには、新しいログインセッションを開始する必要があります。

19
Kusalananda

sermodユーティリティコマンドを使用すると、私の場合はうまくいきました。 ubuntu 18.04で実行しています。

  1. まず、現在の値を確認します

grep nameofuser /etc/passwd

  1. それを変更

Sudo usermod --Shell /bin/bash nameofuser

  1. 確認してください

grep nameofuser /etc/passwd

1
sandip