Shell 软件包指南

出自 ArchWiki
Arch 软件包指南

32 位CLRCMakeCrossDKMSEclipseElectron字体Free PascalGNOMEGoHaskellJavaKDE内核模块LispMesonMinGWNode.js非自由软件OCamlPerlPHPPythonRRubyRust - 安全ShellVCSWebWine

安装

为了让用户能够更改 Shell,该 Shell 必须出现在 /etc/shells 中。大多数 Shell 软件包都有如下安装脚本

shellname.install
post_install() {
    grep -Fqx /bin/shellname /etc/shells || echo /bin/shellname >>/etc/shells
    grep -Fqx /usr/bin/shellname /etc/shells || echo /usr/bin/shellname >>/etc/shells
}

post_upgrade() {
    post_install
}

post_remove() {
    sed -i -r '/^(\/usr)?\/bin\/shellname$/d' etc/shells
}

Shell 补全

大多数 Shell 为一些常用命令提供内置的补全功能,同时也会扫描至少一个系统目录,以查找可能由其他软件包提供的函数。下表总结了软件包可以放置补全文件的位置以及文件的命名方式。

Shell 目录 文件
Bash /usr/share/bash-completion/completions/ binary_name
Elvish /usr/share/elvish/lib/ binary_name.elv
Fish /usr/share/fish/vendor_completions.d/ binary_name.fish
Zsh /usr/share/zsh/site-functions/ _binary_name

其他 Shell

  • Nushell 提供一些默认补全,但尚没有一个可以提供补全的系统级目录[1]。对于生成 Nushell 补全函数的软件包,一种解决方案是将它们打包到 `/usr/share/nushell/autoload/binary_name.nu`,并使用 `post_install()` 函数打印提示,以告知用户在其配置中添加 `use /path/to/file` 语句。
提示: 作为一般规则,软件包不应依赖或可选依赖于 Shell。仅仅因为它们碰巧为 Shell 提供了补全功能,并不意味着存在软件包依赖关系。例外情况是不提供自己补全功能的软件包;补全功能在默认 Shell 软件包中不存在,但由补充的集合软件包 bash-completionzsh-completions 提供。当这些软件包中存在补全文件时,请将它们添加到 optdepends 中。