飞道的博客

TheFuck—Python写的超实用命令纠正工具

392人阅读  评论(0)

The Fuck 是一款功能强大的、Python编写的应用程序,可用于纠正控制台命令中的错误,非常强大。此外,用户还可通过写Python代码的方式自定义修复规则。

修复效果如下动图所示:


更多示例如:

自动识别没有权限,在命令前面添加 sudo:


   
  1. ➜ apt-get install vim
  2. E: Could not open lock file / var/lib/dpkg/lock - open ( 13: Permission denied)
  3. E: Unable to lock the administration directory (/ var/lib/dpkg/), are you root?
  4. ➜ fuck
  5. sudo apt-get install vim [enter/↑/↓/ctrl+c]
  6. [sudo] password  for nvbn:
  7. Reading package lists... Done
  8. ...

识别到没有推送到远程分支,自动追加:


   
  1. ➜ git push
  2. fatal: The current branch master has no upstream branch.
  3. To push the current branch and set the remote as upstream, use
  4.  
  5.     git push --set-upstream origin master
  6. ➜ fuck
  7. git push --set-upstream origin master [enter/↑/↓/ctrl+c]
  8. Counting objects: 9, done.
  9. ...

识别到拼写错误:


   
  1. ➜ puthon
  2. No command 'puthon' found, did you mean:
  3.  Command 'python' from  package 'python-minimal' (main)
  4.  Command 'python' from  package 'python3' (main)
  5. zsh: command not found: puthon
  6. ➜ fuck
  7. python [enter/↑/↓/ctrl+c]
  8. Python 3.4 .2 ( default, Oct 8  2014, 13: 08: 17)
  9. ...

如果你不担心fuck修正的结果是错误的,你可以禁用require_confirmation 选项,让fuck自动运行更正的命令:


   
  1. ➜ apt-get install vim
  2. E: Could not open lock file / var/lib/dpkg/lock - open ( 13: Permission denied)
  3. E: Unable to lock the administration directory (/ var/lib/dpkg/), are you root?
  4. ➜ fuck
  5. sudo apt-get install vim
  6. [sudo] password  for nvbn:
  7. Reading package lists... Done
  8. ...

在开发机上可以这么做,在生产机器上最好是谨慎一点,不推荐这么做。

1.安装

在OS X上,可以通过Homebrew(或在Linux上通过Linuxbrew)安装The Fuck

brew install thefuck

在Ubuntu / Mint上,使用以下命令安装The Fuck


   
  1. sudo apt update
  2. sudo apt install python3-dev python3-pip python3-setuptools
  3. sudo pip3 install thefuck

在FreeBSD上,使用以下命令安装The Fuck

pkg install thefuck

在其他系统上, 使用pip安装The Fuck

pip install thefuck

2.配置

接下来需要把这个命令写入到启动脚本中,根据你的终端类型,运行相应的命令即可:

Bash


   
  1. chcp.com  65001 
  2. eval  "$(thefuck --alias)"

其中 chcp.com 65001 只有在windows环境下才需要运行。

Zsh:

eval "$(thefuck --alias)"

其他的可见:

https://github.com/nvbn/thefuck/wiki/Shell-aliases

3.原理

其实TheFuck的原理就是规则匹配(正则表达式),如果找到匹配规则的命令,则创建一个命令给用户选择或直接运行。

默认情况下的规则有:

  • cat_dir - 当你尝试cat目录的时候,用ls替换cat;

  • cd_correction – 拼写检查和纠正失败的cd命令;

  • cd_mkdir – 在进入目录之前创建目录;

  • cd_parent – 更改 cd.. 为cd ..

  • dry – 修复类似的重复问题:git git push

  • fix_alt_space – 用空格字符代替Alt + Space;

等等,具体可以在官方文档中找到:
https://github.com/nvbn/thefuck

4. 创建自己的修复规则

要添加自己的规则,在 ~/.config/thefuck/rules 文件夹中,

创建一个文件名为 your-rule-name.py 的规则文件,其中必须包含两个函数:


   
  1. match(command: Command) -> bool
  2. get_new_command(command: Command) -> str | list[str]

下面是简单的 sudo 规则示例:


   
  1. def match(command):
  2.      return ( 'permission denied' in command.output.lower()
  3.             or  'EACCES' in command.output)
  4. def get_new_command(command):
  5.      return  'sudo {}'.format(command.script)
  6. # Optional:
  7. enabled_by_default = True
  8. def side_effect(command, fixed_command):
  9.     subprocess.call( 'chmod 777 .', shell=True)
  10. priority = 1000  # Lower first, default is 1000
  11. requires_output = True

如果命令运行结果出现 permission denied 或者 EACCES,则执行 sudo xxx.

此外,还可以配置side_effect,如果你配置了enabled_by_default = True,side_effect函数内的操作将会被执行,本例中是对当前目录下的文件夹执行赋权操作: chmod 777 .

大家可以动手试试自己配一个修复命令,还是相当有意思的。

我们的文章到此就结束啦,如果你喜欢今天的Python 实战教程,请持续关注Python实用宝典。

有任何问题,可以在公众号后台回复:加群,回答相应红字验证信息,进入互助群询问。

原创不易,希望你能在下面点个赞和在看支持我继续创作,谢谢!

点击下方阅读原文可获得更好的阅读体验

Python实用宝典 (pythondict.com)
不只是一个宝典
欢迎关注公众号:Python实用宝典


转载:https://blog.csdn.net/u010751000/article/details/111878435
查看评论
* 以上用户言论只代表其个人观点,不代表本网站的观点或立场