22.9 Shell 配置

Shell 作为用户与操作系统内核之间的交互界面,既是命令解释器,也是编程环境,其设计演化反映了 Unix 系统半个多世纪的发展历程。FreeBSD 对多种 Shell 的支持,体现了其对历史传承与用户选择的尊重。

Zsh

安装 Zsh

  • 使用 pkg 安装:

# pkg install zsh zsh-completions zsh-autosuggestions zsh-syntax-highlighting

软件包说明:

程序
说明

zsh

Zsh shell

zsh-completions

自动补全

zsh-autosuggestions

类 Fish shell 的 Zsh 自动补全

zsh-syntax-highlighting

类 Fish shell 的 Zsh 语法高亮

  • 使用 ports 安装:

# cd /usr/ports/shells/zsh/ && make install clean
# cd /usr/ports/shells/zsh-completions && make install clean
# cd /usr/ports/shells/zsh-autosuggestions/ && make install clean
# cd /usr/ports/shells/zsh-syntax-highlighting/ && make install clean
/usr/
└── ports/
    └── shells/
        ├── zsh/ # Zsh Shell Port
        ├── zsh-completions/ # Zsh 补全库 Port
        ├── zsh-autosuggestions/ # Zsh 自动建议插件 Port
        └── zsh-syntax-highlighting/ # Zsh 语法高亮插件 Port

查看安装后说明

配置 Zsh

将当前用户的默认登录 Shell 修改为 Zsh:

编辑 ~/.zshrc,添加下面几行:

立即使用:

使用主题美化

除了基本配置外,我们还可以通过主题让 Shell 界面更加美观。Powerlevel10k 是一个非常流行的 Zsh 主题,下面是安装和配置方法:

重新加载 Zsh 配置文件,使 Powerlevel10k 主题生效:

回答几个问题即可完成配置。重启后完成配置。

参考文献

Bash

安装 Bash

  • 使用 pkg 安装:

软件包说明:

程序
说明

bash

Bash shell 主程序

bash-completion-freebsd

针对 FreeBSD 的 Bash 补全库扩展,安装时会自动安装 shells/bash-completion 作为依赖

bash-completion-zfs

针对 OpenZFS 的 Bash 补全库扩展

  • 使用 ports 安装:

查看安装后配置

配置 Bash

安装完 Bash 及相关补全库后,我们需要进行一些配置才能正常使用。

编辑 ~/.bash_profile,写入下行。

如果是交互式 shell 且 bash-completion 存在,则加载 Bash 补全功能:

立即使用:

配置 csh/tcsh

除了 Zsh 和 Bash 外,FreeBSD 基本系统还内置了 csh 和 tcsh。csh(C shell,灵感来自 C 语言,语法也类似,作者是 Bill Joy)是 FreeBSD 基本系统内置的 shell,以前是 root 用户的默认 shell。

技巧

csh 与 tcsh 的关系

需要注意的是,FreeBSD 中 csh 实际上就是 tcsh,二者没有区别。可以通过查看源代码 https://github.com/freebsd/freebsd-src/blame/main/bin/csh/Makefilearrow-up-right 以及执行 man csh 来验证,都会重定向至 tcsh,提供 csh 与 tcsh 关系的源代码佐证。

注意

虽然 csh 与 tcsh 本质上是同一程序,但在使用时存在差异,如果以 csh 的参数调用,则部分 tcsh 扩展会被关闭。

注意

FreeBSD 14 中的 shell 被统一为了 sharrow-up-right,记录 FreeBSD 14 默认 shell 变更的提交记录。


  • ~/.cshrc 里面加入下行,为 ls 命令设置彩色输出。

并重新登录即可。


  • 如何让 FreeBSD 的 csh 像 Bash 那样按 Tab 列出无法补齐的候选文件?在 ~/.cshrc 中加入:

重新加载 C shell 配置文件,刷新别名和环境设置:

  • 如何让 csh 像 zsh 那样具有命令错误修正呢?

例如,当你使用 emacs 编写 C 语言程序时,输入 emacs ma 并按 Tab 键回车,会匹配所有以 ma 开头的文件。此配置可以忽略部分匹配的文件,即按 Tab 时不会列出被忽略的文件,便于编程,不会匹配二进制 .o 文件等。

课后习题

  1. 配置 Zsh 环境,安装 Powerlevel10k 主题,并编写一个自定义 Shell 函数用于自动化 FreeBSD 系统更新。

  2. 对比 csh/tcsh 与 sh 在 FreeBSD 基本系统中的实现差异,分析为何 csh 曾作为默认 root Shell。

  3. 为 csh 添加一些现代 Shell 理所应当的功能。

最后更新于