顯示每個已安裝的命令行 shell?
如何顯示每個已安裝的命令行shell(即
bash
,zsh
等),沒有重複,沒有其他內容(即沒有不是 shell 的程序)?這段程式碼幾乎可以在我的Lubuntu系統上執行,(它有、、和) ,但是列印並且列印失敗: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
在 FreeBSD、TrueOS/PC-BSD、DragonFly BSD 等。
已批准的 shell列表,即管理員允許使用者使用命令將登錄 shell
chsh
更改為的 shell ,位於正常/etc/shells
文件中。一個簡單的貓 /etc/shells
給出一個批准的 shell 列表。
但是,這並不是已安裝shell 的完整列表。儘管許多第三方 shell(Almquist 和 TENEX C shell 附帶的作業系統本身)
/etc/shells
在從包或埠安裝時會自行安裝,但這不能保證,當然管理員可能已經更改/etc/shells
,因此有一個 shell已安裝但未獲批准。不過,安裝的 shell列表並不難找到。如前所述,Almquist 和 TENEX C shell 分別帶有作業系統 as
/bin/sh
和/bin/tcsh
(aka/bin/csh
)。向他們添加從軟體包安裝的 shell 列表。在 FreeBSD 包系統中,所有的 shell 都在shells/
包層級的範圍內,因此只需使用該pkg
工具來查詢已安裝的包數據庫:pkg 查詢 "%o %n-%v %c" | awk '/^shells\// {$1="";print $0;}'
這將擷取 fish、rc、v7sh、heirloom-sh 等,如果安裝了它們,但也會對
shells/
層次結構中但本身不是 shell 的包產生少量誤報,例如 bash-completion .進一步閱讀
在 OpenBSD 上
OpenBSD 就像 FreeBSD、TrueOS 等。有一些差異。一個還在執行
貓 /etc/shells
查看已批准的外殼列表,已批准的外殼和已安裝的外殼之間仍然存在差異。
不過,OpenBSD 有一個較舊的包管理器,以及作業系統本身附帶的一組不同的 shell。
在 OpenBSD 上,作業系統本身帶有 Korn shell(特別是 pdksh)和 C shell(不是 TENEX C shell)分別作為
/bin/sh
(aka/bin/ksh
) 和/bin/csh
(not/bin/tcsh
)。同樣,添加到該列表的第三方 shell
shells/
位於包層次結構的區域中,因此查找已安裝的命令是pkg_info -P -A | grep '^shells/'
如果您安裝了 sqlports 包,您還可以使用
sqlite3
對/usr/local/share/sqlports
數據庫進行 SQL 查詢以查找已安裝的 shell 包。進一步閱讀
在 Debian、Ubuntu 等平台上。
同樣,可以通過以下方式獲得已批准的 shell 列表
貓 /etc/shells
這又與已安裝的 shell 列表不同。
在 Debian 和 Ubuntu 上,每個shell 都由包管理器管理。沒有“作業系統附帶”的外殼。
同樣,所有外殼包都被方便地標記。APT(高級打包工具)具有“部分”的概念,而不是 BSD 埠/包世界所具有的層次結構,並且 shell 包位於該
Shells
部分中。有幾種工具可以查詢包管理器的數據庫。我選擇
aptitude
這裡。一跑aptitude search '~i~sshells'
~i
在名為.
~s
_shells
這是aptitude
’ 的“速記”搜尋語法。“真正的”搜尋語法將'?installed ?section(shells)'
是更多的類型。此外:您可以使用命令行選項aptitude
列印出有關每個包的更多資訊。-F
考慮aptitude search -F '%p %v %t %d' '~i~sshells'
例如。
進一步閱讀
- 貝殼。軟體包.debian.org。
- Daniel Burrows 和 Manuel A. Fernandez Montecelo (2016)。aptitude 使用者手冊。德比安。