Shell 命令行扩展 The Fuck

MIT
Python
Linux
2015-05-09
红薯

开发者都或多或少接触过 linux 接触过命令行,当然肯定也都被命令行狠狠地“fuck”过。我很多时候都是微不足道的原因导致了命令行出错,例如将 python 输入成 ptyhon,例如将 ls -alh 输入成 ls a-lh而导致出错,这个时候我会想说:“fuck”。

起源

开发 thefuck 的这位同仁,恐怕也经常会有这种不和谐的情况。因此开发了这个软件 thefuck。

thefuck 不仅仅能修复字符输入顺序的错误,在很多别的你想说“fuck”的情况下,thefuck 依然有效。

例如以下情况。

案例

任何情况下你想说“我操”,你都可以用得到 thefuck。

例如:

ls 和 sl

使用过 ubuntu 的开发者很多都知道有这么一条命令:sl。这条命令是在你将 ls 错误地输成 sl 时,会在屏幕上快速驶过一辆火车。当然,有了 thefuck,sl 似乎也可以退休了。

➜ sl
The program 'sl' is currently not installed. You can install it by typing:
sudo apt-get install sl
➜ fuck
ls #修正
a.go                   b.php           dockerui      jekyll-casper  main.go  PureBlog   sss.png                              typecho
a.php                  c-hash          Font-Awesome  jekyll-pure    mili     signal.c   TeamTalk                             upload
bii-ubuntu-64_3_0.deb  Dockerfile      harmony       JekyllPure     ngircd   signal.c~  tingyun-agent-php-latest.x86_64.deb  web.goblog                   Dockerfile.bak  hashmap       kasper         php-src  sss.jpg    tipi                                 zerver

忘记 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
[sudo] password for nvbn:
Reading package lists... Done

操作 git

➜ git pushfatal: 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
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
Python 3.4.2 (default, Oct  8 2014, 13:08:17)
...

选项修正

➜ git brnchgit: 'brnch' is not a git command. See 'git --help'.

Did you mean this?
    branch

➜ fuck
git branch
* master

其他

thefuck 还有其他很多种用法,就等着你去发现。

安装

安装需求

  • python (2.7+ or 3.3+)

  • pip

  • python-dev

安装方法

  1. 可以使用 pip 安装:sudo pip install thefuck
    或者使用 OS X、Ubuntu、Arch 的包管理器安装

  2. 安装后配置
    bash:

    alias fuck='eval $(thefuck $(fc -ln -1)); history -r'

    Zsh、Fish 和 PowerShell 的 配置方法见这里

更新

更新到最新的 thefuck 的方法非常简单:

sudo pip install thefuck --upgrade

其他

软件原理

前面说了那么多用法,
那么有人觉得 thefuck 可能只是一个用来
thefuck 进行命令修复的模块名和对应的修复原理如下:

  1. brew_unknown_command:修复 brew 命令,例如将 brew docto 修复为 brew doctor

  2. cd_parent:将 cd.. 修正为 cd ..

  3. cd_mkdir:cd 进入不存在的目录时尝试创建目录。

  4. cp_omitting_directory:cp 时添加 -a 选项

  5. fix_alt_space:将所有的的Alt+Space修正为Space。

  6. git_add:修正没有 git add 的情况。

  7. git_checkout:git checkout 不存在的分支之前尝试创建分支。

  8. git_no_command:修正错误的选项,例如 git brnch

  9. git_push:如果 push 失败,尝试将 git push 修正为 git push --set-upstream origin $branch

  10. has_exists_script:为所有的提示不存在的命令尝试添加 ./ 前缀。

  11. lein_not_task:修正 lein,例如 lein rpl

  12. mkdir_p:mkdir 时尝试添加 -p 选项。

  13. no_command:修正不存在的命令,例如 vom 修正为 vim

  14. man_no_space:将没有空格的 man 命令添加空格,例如 mandiff 修正为 man diff

  15. pacman:arch 系统上,如果使用没有安装的软件,尝试使用 pacman 或者 yaourt 安装。

  16. pip_unknown_command:修正错误的 pip 命令,例如 pip isntall 修正为 pip install

  17. python_command:当前目录试图执行没有 x 权限的 python 程序时,修复为添加 python 前缀

  18. sl_ls:sl 修正为 ls

  19. rm_dir:如果删除文件夹,为 rm 添加 -rf 选项。

  20. ssh_known_hosts:如果远程主机公钥不匹配,尝试将远程主机公钥从 know_hosts 中移除。

  21. sudo:如果提示没有权限,尝试添加 sudo

  22. switch_layout:将键盘布局修正为英语布局。

  23. apt_get:如果不存在命令,尝试使用 apt-get 包管理器安装。

  24. brew_install:修正 brew install 的格式。

  25. composer_not_command:修正 composer 命令。

没有启用的模块:

  1. ls_lah:为 ls 添加 -alh 选项。

  2. rm_root:为 rm -rf / 添加 --no-preserve-root 选项。

自定义规则

当然,你也可以自定义修正规则
一个自定义规则的案例:

def match(command, settings):
    return ('permission denied' in command.stderr.lower()            or 'EACCES' in command.stderr)# 获取 stderr 中的字符串和程序返回值(errno),# 修正规则(命令前添加 sudo)def get_new_command(command, settings):
    return 'sudo {}'.format(command.script)# 以下为可选项# 默认是否开启enabled_by_default = True# 附加命令def side_effect(command, settings):
    subprocess.call('chmod 777 .', shell=True)# 优先级,数字越大优先级越低。priority = 1000

使用须知

虽然 thefuck 带来了很多便利,不过仍然建议注意这件事情:

thefuck 会给出的修正后的命令,但是默认情况下你看到它们的时候,命令都已经默认执行了。
大部分情况下,thefuck 可能给出的是正确的修正,但是小部分情况下,给出的修正并不是你想要的。
所以建议将 ~/.thefuck/settings.py 中的设置改为 require_confirmation = True,这样可以自己决定是否执行修正后的命令。

介绍内容来自 segmentfault

的码云指数为
超过 的项目
加载中
请先登录后再评论。

暂无资讯

暂无问答

thefuck安装和使用(ubuntu)

系统环境(已测试可用): ubuntu 18.04 lts (server或desktop),ubuntu 19.04(server或desktop) sudo apt update sudo apt install python3-dev python3-pip sudo pip3 install thefuck 编辑文...

2019/09/18 18:44
54
0
mac下thefuck安装及使用

1. mac 安装 1. 安装 sudo -H pip3 install thefuck 2. 别名 alias fuck='eval $(thefuck $(fc -ln -1)); history -r' 2. 使用 当你打错命令的时候,直接输入fuck,会自动帮你校验,如图:...

2017/10/30 15:33
1K
0
命令纠正工具 thefuck 的简单使用

在unix系列的系统中,总会出现 命令拼写或者执行错误的情况, 比如 把 python 写成了pythou, cd 到一个不存在的目录,执行任务的权限 不够的问题, 这是心里 总是 在 fuck,但是 还要从新输入...

2019/01/16 17:29
16
0
自动纠正命令行错误的开源小工具The Fuck

The Fuck 是命令行下,可以自动识别纠正前一个错误命令的开源小工具。遵守MIT开源协议。环境要求:python (3.4+) ,pip ,python-dev. 安装: OS X, : brew install thefuck Ubuntu / Mint,: s...

02/17 19:31
0
0
介绍一头GitHub上的"草泥马" - thefuck,妈妈再也不用担心我打错命令行了

作为全球最大的同性社交网站,GitHub上面真的是无奇不有,最近小编在上面逛了逛,发现了一个有趣的项目:thefuck。 作为程序员,经常工作于Linux下的我们来说,你是不是经常在终端敲错命令?...

2018/12/19 22:44
0
0
安利一个github上面的一个神级库thefuck,Linux命令敲错了,没关系,自动纠正你的命令

没错就是这么神奇,名字相当噶性,thefuck。当你命令输入错误不要怕,直接来一句fuck,自动纠正你输入的命令。 在你输入错误的命令的时候,忍俊不禁的想来一句fuck,没错你不仅可以嘴上说,命...

2019/10/21 14:29
15
0
2019年10月Github上最热门的Python项目

码农那点事儿 关注我们,一起学习进步 来自:开源最前线(ID:OpenSourceTop) 10 月份 GitHub 上最热门的Python开源项目排行已经出炉啦,在本月的名单中,有开源书籍、有开源课程等,下面就...

2019/12/02 12:00
0
0
Linux几个命令的升级替代品

grep => ack, ag ack和ag是两个文本搜索工具,比自带的grep要好用得多。在指定目录下搜索文本时,它们不需要像grep那样指定各种命令行选项,输出结果也会包含文件名和行号,并且会高亮显示搜...

2019/05/28 20:12
58
0
我在 GitHub 上都见过哪些沙雕项目?

一直对我们的微博保持关注的朋友应该知道,今年年初的时候,我们同时开通了 GitHubDaily 公众号与知乎账号。 在开通知乎账号后,我们回答的第一个问题是《你在 GitHub 上看到过的最有意思的项...

2019/04/29 00:00
0
0
有哪些命令行工具堪称神器?

过去几年,在 GitHub 上见到过不少优质的项目,其中不乏特别实用,能大幅提升生产力的命令行工具。 今天在这里就简单整理下,跟大家分享几个比较实用的命令行工具吧。 mas 一个 Mac 应用商店...

2019/07/17 08:42
0
0

没有更多内容

加载失败,请刷新页面

返回顶部
顶部