欢迎来到尧图网

客户服务 关于我们

您的位置:首页 > 文旅 > 八卦 > thefuck是如何帮助你提高命令行效率

thefuck是如何帮助你提高命令行效率

2025/3/17 22:17:20 来源:https://blog.csdn.net/qq_62835094/article/details/146302376  浏览:    关键词:thefuck是如何帮助你提高命令行效率

文章目录

    • the fuck是什么
    • 如何安装
    • 原理
      • 模块划分
      • 模块介绍
      • 处理流程
      • get_corrected_commands是如何工作的

99% 的人都不知道的: 命令行竟然存在 fuck 命令!功能强大

the fuck是什么

thefuck是开源的命令行纠错工具,可以用于纠正执上一条执行错误的指令

在这里插入图片描述

常用Linux的小伙伴可能会遇到这样的问题,在输入指令时总是因为忘了添加sudo

导致权限不足无法执行

在这里插入图片描述

如果指令很长,又忘了Linux光标跳转快捷键,就不得不猛敲键盘手动添加sudo

如果安装thefuck,只需对着键盘一顿fuck

正确的指令就会显示在终端

在这里插入图片描述

此外,thefuck还可以自动帮你输出安装工具

如果shell在执行时发现指令不存在

此时只需输入fuck

终端就会显示相应的纠正指令

在这里插入图片描述

如何安装

既然fuck这么好用,那我该怎么安装呢?

thefuck支持多个操作系统

但不管是你使用的Mac,Linux,还是Windows

他们仨使安装过程都大同小异

下载python环境(大于3.5.0),安装thefuck,配置别名

首先是Windows

打开powershell

输入pip install thefuck

安装thefuck

在这里插入图片描述

随后在powershell的配置文件中写入如下两条指令

$env:PYTHONIOENCODING="utf-8"
iex "$(thefuck --alias)"

重启powershell,即可完成配置

此时你可能会感到疑惑,powershell的配置,这是啥?我没有啊

没关系,只需短短三行指令,1秒解决你的疑惑

打开powershell,输入如下三条指令

echo $profileTest-Path $profileNew-Item -Path $profile -Type File –Force

在这里插入图片描述

在资源管理器中进入目录:C:\Users\<用户名>\Documents\WindowsPowerShell

会发现目录下多出了Microsoft.PowerShell_profile.ps1文件

这就是powershell的配置信息

在这里插入图片描述

每次powershell打开前都会加载该文件

在这里插入图片描述

其次是Linux

依然是先安装thefuck

在终端输入如下指令

sudo apt update \
sudo apt install python3-dev python3-pip python3-setuptools \
pip3 install thefuck --user

随后输入vim ~/.bashrc

打开shell的配置文件

并在末尾写入eval $(thefuck --alias)

将fuck作为thefuck的别名

在这里插入图片描述

退出.bashrc,并执行配置文件

此时可以正常使用fuck

看到这里,你可能会觉得,这有啥大不了的,不就是多打了几个字嘛,至于这么折腾?

欸嘿,您可别小看了程序员为了"偷懒"能搞出来的那些事儿。这群家伙为了少敲几下键盘,能想出各种奇葩的破事儿

Guido van Rossum在CWI研究所工作时,受够C那繁琐的语法,为了偷懒,徒手搓了个python。python因其简洁的语法被众多开发者喜爱,开发者们甚至打出了这样的口号,life is short, you need python

Max Howell在Mac上安装软件时受够手动编译依赖的痛苦,为了"偷懒",愣是用Ruby撸了一套管理器,通过brew install一键解决依赖

这里说个小插曲,Google曾因Max Howell不会手写二叉树反转而拒绝其面试。因此只要答对这道题,您就可以超越世界级大牛,问鼎码林之巅

这里,需要额外提一嘴,一个比较操蛋的bug

fuck写错了

如果fuck写错没看出来,傻乎乎的以为下载出错,于是重新装了一遍

找问题配环境一小时,最后发现fuck打成funk,这回可真fuck了

原理

不多BB,先放简化流程图

在这里插入图片描述

模块划分

抛开和不同操作系统交互的模块,聚焦于更核心的逻辑

从宏观上,thefuck可以分为三大模块

解析器,流程控制模块,不同分支处理模块

在这里插入图片描述

分支处理继续细分,可得到help打印,版本打印,指令纠正等等
在这里插入图片描述

模块介绍

解析器Parser,负责读取上一条用户输入的指令

并通过调用parse()方法将指令处理为系统可识别的对象

know_args

在这里插入图片描述

之后,流程控制模块将根据know_args中

不同的数据信息进行不同的分支处理

譬如打印帮助文档

打印版本

打印别名

还有最重要的指令纠正,fix_command

在这里插入图片描述

处理流程

这里我们直接放上完整的流程图

在这里插入图片描述

其他模块无足轻重,让我们进入fix_command一探究竟

首先,thefuck会加载配置信息

在这里插入图片描述

配置信息中包含诸多重要的内容

比如与规则相关的

需要排除的规则内容exclude_rules

用户编写的匹配规则存储路径user_dir

随后thefuck将处理know_args,进一步细化数据

得到系统上一次执行的脚本内容command

在这里插入图片描述

并将command传入get_corrected_commands方法

得到纠正的指令

最后将匹配得到的可能的纠正指令通过UI的方式输出

如此就是fuck纠正指令的完整流程

get_corrected_commands是如何工作的

在这里插入图片描述

get_corrected_commands内部处理逻辑比较简单

  1. 调用get_rules()方法,获取全部的规则
  2. 传入command(thefuck封装的系统上次执行的命令+命令输出结果等信息),调用rule.is_match方法,判断当前rule是否匹配command
  3. 返回所有可能的rule

说白了,get_corrected_commands就是拿着command匹配所有规则,符合留下,不符合滚犊子

那么匹配规则如何确定呢?

我们看一个demo

def match(command):if 'not found' in command.output or 'not installed' in command.output:executable = _get_executable(command)return not which(executable) and get_package(executable)else:return Falsedef get_new_command(command):executable = _get_executable(command)name = get_package(executable)formatme = shell.and_('sudo apt-get install {}', '{}')return formatme.format(name, command.script)

这是一个叫做apt_get.py的规则文件

他存在两个和新方法,分别是matchget_new_command

在thefuck运行过程中,apt_get.py会被加载到内存,封装为rule对象

在thefuck处理得到command后,会调用match方法,判断command是否匹配apt_get.py规则

如果要匹配,那么command在终端输出的报错信息必须是not found或者not install,这样就说明用户输入指令出现的问题是找不到

如果找不到,就需要给出安装指令

那么新指令如何给出呢?——get_new_command

当thefuck成功匹配apt_get.py规则后,在后续显示fix 指令时,会调用get_new_command方法,给出新的指令

apt_get.py而言,他就负责从command中提取指令信息,最终返回sudo apt get install xxx指令

至此,完成所有的指令纠正功能

版权声明:

本网仅为发布的内容提供存储空间,不对发表、转载的内容提供任何形式的保证。凡本网注明“来源:XXX网络”的作品,均转载自其它媒体,著作权归作者所有,商业转载请联系作者获得授权,非商业转载请注明出处。

我们尊重并感谢每一位作者,均已注明文章来源和作者。如因作品内容、版权或其它问题,请及时与我们联系,联系邮箱:809451989@qq.com,投稿邮箱:809451989@qq.com

热搜词