当前位置: 首页 > article >正文

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 $profile

Test-Path $profile

New-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 False


def 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指令

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


http://www.kler.cn/a/588376.html

相关文章:

  • C#开发笔记:INI文件操作
  • 分别用树型和UML结构展示java集合框架常见接口和类
  • 从Instagram到画廊:社交平台如何改变艺术家的展示方式
  • 掌握Windows命令提示符中的万能符:*号的全方位使用指南
  • Java基础编程练习第32题-定义接口(Biology、Animal)、类(Person)、子类(Pupil)(PTA选题)
  • 使用c#进行串口通信
  • 商品详情页
  • 第7章 站在对象模型的尖端3: RTTI
  • 考研系列-408真题计算机网络篇(10-17)
  • Centos 7 升级 GCC
  • 找第一个只出现一次的字符(信息学奥塞一本通-1130)
  • 基于大模型的智能客服搭建
  • doris:安全概览
  • R语言:初始环境配置
  • 【实战解析】smallredbook.item_get_video API:小红书视频数据获取与电商应用指南
  • 大语言模型基础--task2:大模型技术基础
  • 【Java】高频面试题
  • 图解多头注意力机制:维度变化一镜到底
  • 完整的模型验证套路
  • NPU的工作原理:神经网络计算的流水线