网站首页 > 技术文章 正文
The Fuck 是一款功能强大的、Python编写的应用程序,可用于纠正控制台命令中的错误,非常强大。此外,用户还可通过写Python代码的方式自定义修复规则。
修复效果如下动图所示:
更多示例如:
自动识别没有权限,在命令前面添加 sudo:
? apt-get install vim
E: Could not open lock file /var/lib/dpkg/lock - open (13: Permission denied)
E: Unable to lock the administration directory (/var/lib/dpkg/), are you root?
? fuck
sudo apt-get install vim [enter/↑/↓/ctrl+c]
[sudo] password for nvbn:
Reading package lists... Done
...
识别到没有推送到远程分支,自动追加:
? git push
fatal: The current branch master has no upstream branch.
To push the current branch and set the remote as upstream, use
git push --set-upstream origin master
? fuck
git push --set-upstream origin master [enter/↑/↓/ctrl+c]
Counting objects: 9, done.
...
识别到拼写错误:
? puthon
No command 'puthon' found, did you mean:
Command 'python' from package 'python-minimal' (main)
Command 'python' from package 'python3' (main)
zsh: command not found: puthon
? fuck
python [enter/↑/↓/ctrl+c]
Python 3.4.2 (default, Oct 8 2014, 13:08:17)
...
如果你不担心fuck修正的结果是错误的,你可以禁用require_confirmation 选项,让fuck自动运行更正的命令:
? apt-get install vim
E: Could not open lock file /var/lib/dpkg/lock - open (13: Permission denied)
E: Unable to lock the administration directory (/var/lib/dpkg/), are you root?
? fuck
sudo apt-get install vim
[sudo] password for nvbn:
Reading package lists... Done
...
在开发机上可以这么做,在生产机器上最好是谨慎一点,不推荐这么做。
1.安装
在OS X上,可以通过Homebrew(或在Linux上通过Linuxbrew)安装The Fuck:
brew install thefuck
在Ubuntu / Mint上,使用以下命令安装The Fuck:
sudo apt update
sudo apt install python3-dev python3-pip python3-setuptools
sudo pip3 install thefuck
在FreeBSD上,使用以下命令安装The Fuck:
pkg install thefuck
在其他系统上, 使用pip安装The Fuck:
pip install thefuck
2.配置
接下来需要把这个命令写入到启动脚本中,根据你的终端类型,运行相应的命令即可:
Bash
chcp.com 65001
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 的规则文件,其中必须包含两个函数:
match(command: Command) -> bool
get_new_command(command: Command) -> str | list[str]
下面是简单的 sudo 规则示例:
def match(command):
return ('permission denied' in command.output.lower()
or 'EACCES' in command.output)
def get_new_command(command):
return 'sudo {}'.format(command.script)
# Optional:
enabled_by_default = True
def side_effect(command, fixed_command):
subprocess.call('chmod 777 .', shell=True)
priority = 1000 # Lower first, default is 1000
requires_output = True
如果命令运行结果出现 permission denied 或者 EACCES,则执行 sudo xxx.
此外,还可以配置side_effect,如果你配置了enabled_by_default = True,side_effect函数内的操作将会被执行,本例中是对当前目录下的文件夹执行赋权操作:
chmod 777
大家可以动手试试自己配一个修复命令,还是相当有意思的。
————————————————— END ————————————————————
猜你喜欢
- 2024-10-15 微软推广XB1新招:拉朋友入伙奖一年EA Access会籍!
- 2024-10-15 EA Access很可能在年内登陆PS4(ea access hub)
- 2024-10-15 雅虎日本欲32亿美元收购eAccess(雅虎 收购)
- 2024-10-15 EA统一旗下订阅服务名称 "EA Play"更加专注玩家体验
- 2024-10-15 Windows 10 Microsfot Store新增订阅和Timeline功能
- 2024-10-15 EA Access登陆PS4平台 每月5美元 大作无限畅玩
- 2024-10-15 《FIFA15》正式登陆EA Access服务免费游戏库
- 2024-10-15 EA Access会员已可提前游玩《极品飞车 热度》
- 2024-10-15 手摸手带你 Docker 从入门到实践(dockerl)
- 2024-10-15 嵌入式学习总结5(嵌入式课程总结与体会)
- 02-21走进git时代, 你该怎么玩?_gits
- 02-21GitHub是什么?它可不仅仅是云中的Git版本控制器
- 02-21Git常用操作总结_git基本用法
- 02-21为什么互联网巨头使用Git而放弃SVN?(含核心命令与原理)
- 02-21Git 高级用法,喜欢就拿去用_git基本用法
- 02-21Git常用命令和Git团队使用规范指南
- 02-21总结几个常用的Git命令的使用方法
- 02-21Git工作原理和常用指令_git原理详解
- 最近发表
- 标签列表
-
- cmd/c (57)
- c++中::是什么意思 (57)
- sqlset (59)
- ps可以打开pdf格式吗 (58)
- phprequire_once (61)
- localstorage.removeitem (74)
- routermode (59)
- vector线程安全吗 (70)
- & (66)
- java (73)
- org.redisson (64)
- log.warn (60)
- cannotinstantiatethetype (62)
- js数组插入 (83)
- resttemplateokhttp (59)
- gormwherein (64)
- linux删除一个文件夹 (65)
- mac安装java (72)
- reader.onload (61)
- outofmemoryerror是什么意思 (64)
- flask文件上传 (63)
- eacces (67)
- 查看mysql是否启动 (70)
- java是值传递还是引用传递 (58)
- 无效的列索引 (74)