Shell
在 shell 腳本中找出使用者的預設 shell
我想知道是否有辦法在 shell 腳本中找出目前使用者的預設 shell?
案例:我正在編寫一個為命令設置別名的腳本,並且該別名是在 shell 腳本中設置的。
!# /bin/bash alias = 'some command to set the alias'
腳本中有一個邏輯,它會嘗試查找執行腳本的使用者的預設 shell,並將此別名添加到相應的 ~/.bashrc 或 ~/.zshrc 文件中
但是當我在腳本前面添加一個 shebang 並明確要求它使用 bash 時,儘管我在 ZSH 終端上執行此腳本,但此處發布的答案總是按預期返回 bash。
有沒有辦法獲得執行腳本的 shell 類型,而不管 shebang 設置如何?
我正在尋找一種適用於 Mac 和所有基於 linux 的小酒館的解決方案。
$ finger $USER|grep -oP 'Shell: \K.*' /bin/mksh
環境變數
SHELL
將始終擴展為呼叫使用者的預設登錄 shell (從 獲取值/etc/passwd
)。對於任何其他給定使用者,您需要使用 進行一些處理
/etc/passwd
,這是一個簡單的awk
片段:awk -F: -v user="foobar" '$1 == user {print $NF}' /etc/passwd
替換
foobar
為實際使用者名。如果您有
ldap
(或類似的東西),請使用getent
獲取數據庫而不是直接解析/etc/passwd
:getent passwd | awk -F: -v user="foobar" '$1 == user {print $NF}'
或最乾淨的方法,讓我們
getent
進行解析(感謝@Kusalananda):getent passwd foobar | awk -F: '{print $NF}'