此页面记录了 TheFuck 用于与不同 shell 环境交互的 shell 集成系统。Shell 集成是使 TheFuck 能够检索错误命令、执行更正后的命令以及跨各种 shell 实现管理 shell 历史记录的核心组件。有关特定 shell 配置的信息,请参阅支持的 Shell。
Shell 集成系统为 TheFuck 与不同的 shell 环境(Bash、Zsh、Fish、Tcsh)进行交互提供了一个通用接口,同时处理特定于 shell 的实现细节。尽管 shell 环境存在差异,但这个抽象层允许 TheFuck 在不同的 shell 环境中一致地工作。
来源:thefuck/shells/generic.py16-154 thefuck/shells/bash.py11-92 thefuck/shells/zsh.py12-96 thefuck/shells/fish.py40-129 thefuck/shells/tcsh.py8-44
Shell 集成系统遵循类层次结构,其中包含一个基类 Generic,它定义了接口并提供了默认实现。每个特定的 shell 实现都继承自这个基类,并在需要时覆盖方法。
来源:thefuck/shells/generic.py16-154 thefuck/shells/bash.py11-92 thefuck/shells/zsh.py12-96 thefuck/shells/fish.py40-129 thefuck/shells/tcsh.py8-44
Generic 类提供了所有 shell 实现都必须遵循的基接口。此接口包括用于以下功能的各种方法:
| 方法 | 目的 |
|---|---|
from_shell | 在应用程序中运行之前准备命令(展开别名) |
to_shell | 为在 shell 中运行准备命令 |
app_alias | 为 TheFuck 在 shell 中创建一个别名函数 |
get_history | 从 shell 中检索命令历史记录 |
put_to_history | 将更正后的命令添加到 shell 历史记录 |
how_to_configure | 返回 shell 配置说明 |
and_, or_ | 使用逻辑运算符创建复合命令 |
split_command | 使用类 shell 语法拆分命令 |
get_aliases | 检索 shell 别名 |
来源:thefuck/shells/generic.py16-154
每个 shell 实现都自定义了通用接口,以处理特定于 shell 的行为和语法。
Bash 实现自定义了
.bash_history 访问历史记录.bashrc 或 .bash_profile 进行 Shell 配置来源:thefuck/shells/bash.py11-92 tests/shells/test_bash.py1-90
Zsh 实现与 Bash 类似,但具有 Zsh 特有的
.zsh_history).zshrc 进行配置来源:thefuck/shells/zsh.py12-96 tests/shells/test_zsh.py1-85
Fish shell 实现与众不同,具有
来源:thefuck/shells/fish.py40-129 tests/shells/test_fish.py1-136
Tcsh 实现支持 Tcsh shell
.history 进行历史记录管理来源:thefuck/shells/tcsh.py8-44 tests/shells/test_tcsh.py1-77
来源:thefuck/shells/generic.py52-71 thefuck/shells/bash.py14-35 thefuck/shells/zsh.py15-38 thefuck/shells/fish.py51-66
Shell 集成最重要的功能之一是为 TheFuck 创建 shell 别名函数。此函数(通常命名为 fuck)是用户用于纠正先前命令的调用。
每个 shell 实现都提供了其自己的 app_alias() 版本,该版本
Bash 和 Zsh 实现还支持“即时模式”,该模式
fuck 命令来源:thefuck/shells/generic.py38-44 thefuck/shells/bash.py14-54 thefuck/shells/zsh.py15-59 thefuck/shells/tcsh.py11-14
每个 shell 实现都提供了一个 how_to_configure() 方法,该方法返回特定于 shell 的配置说明。这包括
| Shell | 配置文件 | 配置内容 |
|---|---|---|
| Bash | ~/.bashrc 或 ~/.bash_profile | eval "$(thefuck --alias)" |
| Zsh | ~/.zshrc | eval $(thefuck --alias) |
| Fish | ~/.config/fish/config.fish | `thefuck --alias |
| Tcsh | ~/.tcshrc | eval \thefuck --alias`` |
Shell 集成系统还提供了一个实用方法 _create_shell_configuration(),它会生成一个 ShellConfiguration 对象,其中包含:
来源: thefuck/shells/generic.py149-154 thefuck/shells/bash.py75-86 thefuck/shells/zsh.py86-90 thefuck/shells/fish.py103-107 thefuck/shells/tcsh.py35-39
Shell 集成系统提供了访问和修改 Shell 历史记录的方法。这些方法处理特定于 Shell 的历史记录文件的格式和位置
_get_history_file_name() - 返回 Shell 历史记录文件的路径_get_history_line() - 格式化命令以添加到历史记录_script_from_history() - 从历史记录行中提取命令put_to_history() - 将命令添加到 Shell 的历史记录文件此功能对于 TheFuck 修正先前命令并可以选择用修正后的命令更新 Shell 历史记录的能力至关重要。
来源: thefuck/shells/generic.py46-130 thefuck/shells/bash.py68-73 thefuck/shells/zsh.py73-84 thefuck/shells/fish.py85-129 thefuck/shells/tcsh.py28-33
每个 Shell 实现都提供一个 _get_version() 方法,用于检索 Shell 的版本。此信息由 info() 方法使用,以显示 Shell 名称和版本
[Shell Name] [Version]
例如
此信息有助于调试和兼容性检查。
来源: thefuck/shells/generic.py136-147 thefuck/shells/bash.py88-92 thefuck/shells/zsh.py92-96 thefuck/shells/fish.py109-126 thefuck/shells/tcsh.py41-44