Shell

在 shell 腳本中找出使用者的預設 shell

  • April 12, 2022

我想知道是否有辦法在 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}'

引用自:https://unix.stackexchange.com/questions/352316