如何展示每一個安裝了命令列 shell,(即bash
,,zsh
ETC。),沒有重複項,也沒有其他內容(即沒有不是 shell 的程式)?這段程式碼幾乎適用於我的盧本圖系統,(有dash
、ksh
、zsh
和csh
)yash
,但列印whiptail
並無法列印yash
:
apropos shell | grep sh | \
sed 's/ .*//;s/.*/which &/e;/^\/bin\//!d;s/.*/realpath &/e;/^\/bin\//!d' | \
sort -u | xargs whatis
bash (1) - GNU Bourne-Again SHell
bsd-csh (1) - a shell (command interpreter) with C-like syntax
dash (1) - command interpreter (shell)
ksh93 (1) - KornShell, a command and programming language
lksh (1) - Legacy Korn shell built on mksh
mksh (1) - MirBSD Korn shell
whiptail (1) - display dialog boxes from shell scripts
zsh5 (1) - the Z shell
答案1
在 FreeBSD、TrueOS/PC-BSD、DragonFly BSD 等。
名單得到正式認可的shell,即管理員允許使用者更改其權限的 shell登入外殼to 與chsh
指令一起,位於常規/etc/shells
文件中。一個簡單的
貓 /etc/shell給出了批准的 shell 的清單。
然而,這並不是完整的列表已安裝貝殼。儘管許多第三方 shell(作業系統本身附帶 Almquist 和 TENEX C shell)/etc/shells
在從軟體包或連接埠安裝時會自行安裝,但這並不能保證,當然管理員可能已更改,/etc/shells
因此有一個 shell已安裝但這不是得到正式認可的。
名單已安裝不過,貝殼並不難取得。如前所述,Almquist 和 TENEX C shell 附帶作業系統,分別為/bin/sh
和/bin/tcsh
(又稱/bin/csh
)。在其中新增從軟體包安裝的 shell 清單。在 FreeBSD 軟體包系統中,所有 shell 都位於shells/
軟體包層次結構區域中,因此只需使用該pkg
工具來查詢已安裝軟體包資料庫:
pkg 查詢「%o %n-%v %c」| awk '/^shells\// {$1="";print $0;}'
shells/
如果安裝了 Fish、rc、v7sh、heirloom-sh 等,這將捕獲它們,但也會對層次結構中但本身不是 shell 的套件產生一些誤報
進一步閱讀
在 OpenBSD 上
OpenBSD 就像 FreeBSD、TrueOS 等。有一些差異。一個還在運行
貓 /etc/shell查看已核准的 shell 列表,已核准的 shell 和已安裝的 shell 之間仍存在差異。
不過,OpenBSD 有一個較舊的套件管理器,以及作業系統本身附帶的一組不同的 shell。
在 OpenBSD 上,作業系統本身附帶 Korn shell(特別是 pdksh)和 C shell(不是 TENEX C shell),分別作為/bin/sh
(aka /bin/ksh
)和/bin/csh
(not /bin/tcsh
)。
同樣,新增至該清單中的第三方 shell 位於shells/
套件層次結構區域中,因此尋找已安裝 shell 的命令是
pkg_info -P -A | pkg_info -P -A | grep '^shells/'
如果安裝了 sqlports 軟體包,您也可以使用sqlite3
SQL 查詢/usr/local/share/sqlports
資料庫來尋找已安裝的 shell 軟體包。
進一步閱讀
在 Debian、Ubuntu 等。
同樣,可以透過以下方式獲得批准的 shell 列表
貓 /etc/shell同樣,這與已安裝的 shell 清單不同。
在 Debian 和 Ubuntu 上,每一個shell 由套件管理器管理。沒有「作業系統附帶」的 shell。
同樣,所有 shell 套件都已輕鬆標記。 APT(進階打包工具)具有「部分」的概念,而不是像 BSD 連接埠/套件世界那樣具有層次結構,而 shell 套件位於部分中Shells
。
有多種工具可以查詢套件管理器的資料庫。我選擇aptitude
這裡。一跑
資質搜尋 '~i~sshells'
~i
它在名為 的部分 ( ~s
)中搜尋已安裝的 ( ) 軟體包shells
。
這是aptitude
的「簡寫」搜尋語法。 「真正的」搜尋語法是需要'?installed ?section(shells)'
輸入更多內容的語法。此外:您可以使用命令列選項aptitude
列印有關每個套件的更多資訊。-F
考慮
能力搜尋 -F '%p %v %t %d' '~i~sshells'例如。
進一步閱讀
- 貝殼。 packages.debian.org。
- 丹尼爾·伯羅斯和曼努埃爾·費爾南德斯·蒙特塞洛 (2016)。aptitude 使用手冊。德班。
答案2
你可以使用該/etc/shells
文件。它應該包含有效登入 shell 的清單。