私は、ある時点で/ bin/zshにユーザーのシェルを変更する.shスクリプトをプログラミングしています。コマンドは以下のはもちろんである:現在のユーザーのシェルを特定する
chsh -s /bin/zsh
しかし、これは、ユーザーのパスワードを要求し、私は現在のユーザのシェルがすでに/bin/zsh
でない場合にのみ、それを実行したいと思います。このために私は現在のシェルを知っているコマンドを必要とし、それを"/bin/zsh"
またはそれと同様に比較します。 Cのgetusershell
関数があることがわかりましたが、これをシェルスクリプトから知る方法はありませんか?
更新:申し訳ありませんが、私はユーザーが希望するシェルとして指定したシェルを意味します。はい、/etc/passwd
で指定されたものです。この背後にある論理は、スクリプトがユーザーの好みのシェルをzshに変更しようとしていることです。スクリプトがまだzshでない場合は最初にチェックします。
grep/etc/passwdを使用して、ユーザーの「公式」シェルを取得します。そのシェルから実際にこのスクリプトを実行していない可能性があることに注意してください。彼らはよくダッシュを使ってログインし、手動でbashを実行し、kornシェルなどに切り替えることができます。 –
@MarcB Linuxをサポートしている場合は、getent passwdを使用する方が良いでしょう。$ USER " grep '/ etc/passwd'は、nsswitch(LDAP、NISなど)で設定されたwhahteverを検索するので、'/etc/passwd'をgrepするのではなく、 '/ etc/passwd'を使うシステムでのみ機能します。 –
「現在のシェル」とはどういう意味ですか? '/ etc/passwd'または現在実行中のもので現在指定されているものは? – Jens