シェルスクリプトで現在のユーザーのデフォルトシェルを見つける方法があるかどうか疑問に思います。
ユースケース:コマンドのエイリアスを設定するスクリプトを作成しており、エイリアスはシェルスクリプトに設定されています。
!# /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
実際のユーザー名に置き換えます。
ldap
1つ(または同様のもの)がある場合は、getent
直接解析する代わりにデータベースインポートを使用してください/etc/passwd
。
getent passwd | awk -F: -v user="foobar" '$1 == user {print $NF}'
または、最もきちんとした方法で解析してみましょうgetent
(@Kusalanandaに感謝します)。
getent passwd foobar | awk -F: '{print $NF}'