The Fuck 是一款功能强大的 、Python编写的应用程序 ,可用于纠正控制台命令中的错误 ,非常强大 。此外 ,用户还可通过写Python代码的方式自定义修复规则 。
➜ 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
在开发机上可以这么做 ,在生产机器上最好是谨慎一点 ,不推荐这么做 。
安装
在OS X上 ,可以通过Homebrew(或在Linux上通过Linuxbrew)安装The Fuck:
在Ubuntu / Mint上 ,使用以下命令安装The Fuck:
sudo apt update
sudo apt install python3-dev python3-pip python3-setuptools
sudo pip3 install thefuck
在FreeBSD上 ,使用以下命令安装The Fuck:
配置
接下来需要把这个命令写入到启动脚本中 ,根据你的终端类型 ,运行相应的命令即可:
chcp.com 65001
eval "$(thefuck --alias)"
其中 http://chcp.com 65001 只有在windows环境下才需要运行 。
eval "$(thefuck --alias)"
原理
其实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
创建自己的修复规则
要添加自己的规则 ,在 ~/.config/thefuck/rules 文件夹中 ,
创建一个文件名为 your-rule-name.py 的规则文件 ,其中必须包含两个函数:
match(command: Command) -> bool
get_new_command(command: Command) -> str | list[str]
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
# 兄弟们学习python ,有时候不知道怎么学 ,从哪里开始学 。掌握了基本的一些语法或者做了两个案例后 ,不知道下一步怎么走 ,不知道如何去学习更加高深的知识 。
# 那么对于这些大兄弟们 ,我准备了大量的免费视频教程 ,PDF电子书籍,以及源代码!
# 直接在这个君羊 872937351 自取即可
如果命令运行结果出现 permission denied 或者 EACCES ,则执行 sudo xxx.
此外 ,还可以配置side_effect,如果你配置了enabled_by_default = True ,side_effect函数内的操作将会被执行 ,本例中是对当前目录下的文件夹执行赋权操作: chmod 777 .
最后
大家可以动手试试自己配一个修复命令 ,还是相当有意思的 。
声明:本站所有文章 ,如无特殊说明或标注 ,均为本站原创发布 。任何个人或组织 ,在未征得本站同意时 ,禁止复制 、盗用 、采集 、发布本站内容到任何网站 、书籍等各类媒体平台 。如若本站内容侵犯了原著者的合法权益 ,可联系我们进行处理 。