シェルスクリプトでユーザーのデフォルトシェルを見つける

シェルスクリプトでユーザーのデフォルトシェルを見つける

シェルスクリプトで現在のユーザーのデフォルトシェルを見つける方法があるかどうか疑問に思います。

ユースケース:コマンドのエイリアスを設定するスクリプトを作成しており、エイリアスはシェルスクリプトに設定されています。

!# /bin/bash
alias = 'some command to set the alias'

スクリプトを実行しているユーザーの既定のシェルを探し、対応する ~/.bashrc または ~/.zshrc ファイルにこのエイリアスを追加するロジックがスクリプトにあります。

しかし、スクリプトの前にshebangを追加し、明示的にbashを使用するように要求すると、答えが投稿されました。ここZSH端末でこのスクリプトを実行しても、常に期待どおりにbashが返されます。

shebang設定に関係なく、スクリプトを実行するシェルタイプを取得する方法はありますか?

私はMacとすべてのLinuxベースのビストロで動作するソリューションを探しています。

ベストアンサー1

環境変数はSHELL常にデフォルトのログインシェルに展開されます。ユーザーに電話する(から値を取得します/etc/passwd)。

他の特定のユーザーの場合は、いくつかの処理を実行する必要があります/etc/passwd。以下は簡単なawkスニペットです。

awk -F: -v user="foobar" '$1 == user {print $NF}' /etc/passwd

foobar実際のユーザー名に置き換えます。

ldap1つ(または同様のもの)がある場合は、getent直接解析する代わりにデータベースインポートを使用してください/etc/passwd

getent passwd | awk -F: -v user="foobar" '$1 == user {print $NF}'

または、最もきちんとした方法で解析してみましょうgetent(@Kusalanandaに感謝します)。

getent passwd foobar | awk -F: '{print $NF}'

おすすめ記事