agc*_*agc 5 shell bash zsh csh posix
如何显示每个已安装的命令行shell(即bash,zsh,等等),没有重复,没有别的,(即没有程序,没有弹)?此代码几乎适用我的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
Run Code Online (Sandbox Code Playgroud)
Jde*_*eBP 13
批准的shell列表,即管理员允许用户使用命令将其登录shell更改为的shellchsh,在常规/etc/shells文件中。一个简单的
猫 /etc/shells给出一个已批准的炮弹列表。
但是,这并不是已安装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 类似于 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)。
同样,添加到该列表中的第三方 shellshells/位于包层次结构的区域中,因此查找已安装的命令的命令是
pkg_info -P -A | grep '^shells/'
如果安装了 sqlports 包,还可以使用sqlite3对/usr/local/share/sqlports数据库进行 SQL 查询以查找已安装的 shell 包。
同样,可以通过以下方式获得批准的外壳列表
猫 /etc/shells这与已安装的 shell 列表不同。
在 Debian 和 Ubuntu 上,每个shell 都由包管理器管理。没有“随操作系统一起提供”的外壳。
同样,所有 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'例如。
| 归档时间: |
|
| 查看次数: |
1554 次 |
| 最近记录: |