The Fuck是一款出色的應用程序,其靈感來自@liamosaur 推文,它可以糾正先前控制台命令中的錯誤。
是不是他媽太慢了?嘗試實驗性即時模式!
更多範例:
➜ 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)
...
➜ git brnch
git: ' brnch ' is not a git command. See ' git --help ' .
Did you mean this ?
branch
➜ fuck
git branch [enter/↑/↓/ctrl+c]
* master
➜ lein rpl
' rpl ' is not a task. See ' lein help ' .
Did you mean this ?
repl
➜ fuck
lein repl [enter/↑/↓/ctrl+c]
nREPL server started on port 54848 on host 127.0.0.1 - nrepl://127.0.0.1:54848
REPL-y 0.3.1
...
如果您不怕盲目地執行已修正的命令,則可以停用require_confirmation
設定選項:
➜ 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
...
在 macOS 或 Linux 上,您可以透過 Homebrew 安裝The Fuck :
brew install thefuck
在 Ubuntu / Mint 上,使用以下指令安裝The Fuck :
sudo apt update
sudo apt install python3-dev python3-pip python3-setuptools
pip3 install thefuck --user
在 FreeBSD 上,使用以下指令安裝The Fuck :
pkg install thefuck
在 ChromeOS 上,使用 chromebrew 使用以下指令安裝The Fuck :
crew install thefuck
在基於 Arch 的系統上,使用以下命令安裝The Fuck :
sudo pacman -S thefuck
在其他系統上,使用pip
安裝The Fuck :
pip install thefuck
或者,您可以使用作業系統套件管理器(OS X、Ubuntu、Arch)。
# 建議您將此指令放在.bash_profile
、 .bashrc
、 .zshrc
或其他啟動腳本:
eval $( thefuck --alias )
# You can use whatever you want as an alias, like for Mondays:
eval $( thefuck --alias FUCK )
或在您的 shell 配置中(Bash、Zsh、Fish、Powershell、tcsh)。
變更僅在新的 shell 工作階段中可用。若要使變更立即可用,請執行source ~/.bashrc
(或 shell 設定文件,如.zshrc
)。
要在不確認的情況下執行固定命令,請使用--yeah
選項(或簡稱為-y
,如果您特別沮喪,則使用--hard
):
fuck --yeah
若要遞歸修復命令直到成功,請使用-r
選項:
fuck -r
pip3 install thefuck --upgrade
注意:別名功能在The Fuck的 v1.34 中已更改
若要刪除The Fuck ,請逆向安裝過程:
Fuck嘗試將前一個指令與規則配對。如果找到匹配項,則會使用匹配的規則建立新命令並執行。預設啟用以下規則:
adb_unknown_command
– 修復拼字錯誤的指令,例如adb logcta
;ag_literal
– 在建議時將-Q
加入ag
;aws_cli
– 修正拼字錯誤的指令,例如aws dynamdb scan
;az_cli
– 修正拼字錯誤的指令,例如az providers
;cargo
– 運作cargo build
而不是cargo
;cargo_no_command
– 修復錯誤的指令,如cargo buid
;cat_dir
– 當您嘗試cat
目錄時用ls
取代cat
;cd_correction
– 拼字檢查並修正失敗的 cd 指令;cd_cs
– 將cs
更改為cd
;cd_mkdir
– 在 cd 進入目錄之前建立目錄;cd_parent
– 將cd..
改為cd ..
;chmod_x
– 新增執行位;choco_install
– 為巧克力包添加常見後綴;composer_not_command
– 修復composer指令名稱;conda_mistype
– 修復 conda 指令;cp_create_destination
– 當您嘗試cp
或mv
到不存在的目錄時建立一個新目錄cp_omitting_directory
– 在cp
目錄時加上-a
;cpp11
– 將缺少的-std=c++11
加入g++
或clang++
;dirty_untar
– 修復在目前目錄中解壓縮的tar x
指令;dirty_unzip
– 修復在目前目錄中解壓縮的unzip
指令;django_south_ghost
– 新增--delete-ghost-migrations
失敗,因為 Ghosts django 往南遷移;django_south_merge
– 加入--merge
到不一致的 django 向南遷移;docker_login
– 執行docker login
並重複先前的命令;docker_not_command
– 修復錯誤的 docker 指令,例如docker tags
;docker_image_being_used_by_container
‐ 在刪除映像之前刪除正在使用該映像的容器;dry
– 修正像git git push
這樣的重複;fab_command_not_found
– 修復拼字錯誤的結構指令;fix_alt_space
– 將 Alt+Space 替換為空白字元;fix_file
– 在$EDITOR
中開啟一個有錯誤的檔案;gem_unknown_command
– 修復錯誤的gem
指令;git_add
– 修正“pathspec 'foo' 與 git 已知的任何檔案不符。” ;git_add_force
– 當路徑為 .gitignore 時,將--force
新增至git add <pathspec>...
;git_bisect_usage
– 修復二等分時的git bisect strt
、 git bisect goood
、 git bisect rset
等;git_branch_delete
– 將git branch -d
改為git branch -D
;git_branch_delete_checked_out
– 當嘗試刪除已簽出的分支時,將git branch -d
更改為git checkout master && git branch -D
;git_branch_exists
– 在建立已存在的分支時提供git branch -d foo
、 git branch -D foo
或git checkout foo
;git_branch_list
– 捕獲git branch list
來取代git branch
並刪除已建立的分支;git_branch_0flag
– 修正git branch 0v
和git branch 0r
等指令刪除建立的分支;git_checkout
– 修復分支名稱或建立新分支;git_clone_git_clone
– 用git clone git clone ...
git clone ...
git_clone_missing
– 將git clone
加入到看似連結到 git 儲存庫的 URL。git_commit_add
– 如果因為沒有任何內容而失敗,則在上一次提交之後提供git commit -a ...
或git commit -p ...
;git_commit_amend
– 上次提交後提供git commit --amend
;git_commit_reset
– 在上次提交後提供git reset HEAD~
;git_diff_no_index
– 將--no-index
加入到未追蹤檔案上的先前git diff
;git_diff_staged
– 將--staged
加入到先前的git diff
中並產生意外的輸出;git_fix_stash
– 修復git stash
指令(拼字錯誤的子指令和缺少save
);git_flag_after_filename
– 修正fatal: bad flag '...' after filename
git_help_aliased
– 修正了git help <alias>
指令替換為別名指令的問題;git_hook_bypass
– 在git am
、 git commit
或git push
指令之前加入--no-verify
標誌;git_lfs_mistype
– 修正輸入錯誤的git lfs <command>
指令;git_main_master
– 修正main
和master
之間不正確的分支名稱git_merge
– 將遠端新增至分支名稱;git_merge_unrelated
– 在需要時加入--allow-unrelated-histories
git_not_command
– 修復錯誤的 git 指令,例如git brnch
;git_pull
– 在執行之前的git pull
之前設定上游;git_pull_clone
– 當倉庫不存在時複製而不是拉取;git_pull_uncommitted_changes
– 在拉取之前隱藏更改並在拉取之後彈出它們;git_push
– 將--set-upstream origin $branch
加入到先前失敗的git push
中;git_push_different_branch_names
– 修正本機分支名稱與遠端分支名稱不符時的推播;git_push_pull
– 當push
被拒絕時執行git pull
;git_push_without_commits
– 如果您忘記並且僅git add .
,建立新項目時;git_rebase_no_changes
– 當沒有更改時執行git rebase --skip
而不是git rebase --continue
;git_remote_delete
– 將git remote delete remote_name
替換為git remote remove remote_name
;git_rm_local_modifications
– 當您嘗試rm
本機修改的檔案時新增-f
或--cached
;git_rm_recursive
– 當您嘗試rm
目錄時新增-r
;git_rm_staged
– 當您嘗試rm
包含暫存變更的檔案時新增-f
或--cached
git_rebase_merge_dir
– 提供git rebase (--continue | --abort | --skip)
或在 rebase 正在進行時刪除.git/rebase-merge
目錄;git_remote_seturl_add
– 當git remote set_url
在不存在的遠端上時執行git remote add
;git_stash
– 在變基或切換分支之前儲存您的本機修改;git_stash_pop
– 在彈出儲存之前新增本機修改,然後重設;git_tag_force
– 當標籤已經存在時,將--force
新增至git tag <tagname>
;git_two_dashes
– 在git commit -amend
或git rebase -continue
等指令中加入缺少的破折號;go_run
– 編譯/執行 Go 程式時附加.go
副檔名;go_unknown_command
– 修復錯誤的go
指令,例如go bulid
;gradle_no_task
– 修復未找到或不明確的gradle
任務;gradle_wrapper
– 用./gradlew
替換gradle
;grep_arguments_order
– 修正 grep -lir 等情況下的grep
參數順序grep -lir . test
;grep_recursive
– 當您嘗試grep
目錄時新增-r
;grunt_task_not_found
– 修復拼字錯誤的grunt
指令;gulp_not_task
– 修復拼字錯誤的gulp
任務;has_exists_script
– 當腳本/二進位存在時在前面加上./
;heroku_multiple_apps
– 將--app <app>
加入到heroku
指令,例如heroku pg
;heroku_not_command
– 修復錯誤的heroku
指令,例如heroku log
;history
– 嘗試用歷史記錄中最相似的命令取代命令;hostscli
– 嘗試修復hostscli
使用;ifconfig_device_not_found
– 修復錯誤的裝置名稱,例如wlan0
至wlp2s0
;java
– 執行 Java 程式時刪除.java
副檔名;javac
– 編譯 Java 檔案時追加缺少的.java
;lein_not_task
– 修復錯誤的lein
任務,例如lein rpl
;long_form_help
– 當不支援短格式版本時將-h
改為--help
ln_no_hard_link
– 捕捉目錄上的硬連結創建,建議符號連結;ln_s_order
– 修正ln -s
參數順序;ls_all
– 當輸出為空時將-A
加到ls
;ls_lah
– 將-lah
加入ls
;man
– 更改手冊部分;man_no_space
– 修復沒有空格的 man 指令,例如mandiff
;mercurial
– 修復錯誤的hg
指令;missing_space_before_subcommand
– 修復像npminstall
這樣缺少空格的指令;mkdir_p
– 當您嘗試建立沒有父目錄的目錄時新增-p
;mvn_no_command
– 將clean package
加入mvn
;mvn_unknown_lifecycle_phase
– 使用mvn
修復拼字錯誤的生命週期階段;npm_missing_script
– 修正npm run-script <script>
中的npm
自訂腳本名稱;npm_run_script
– 為自訂npm
腳本新增缺少的run-script
;npm_wrong_command
– 修復錯誤的 npm 指令,例如npm urgrade
;no_command
– 修復錯誤的控制台指令,例如vom/vim
;no_such_file
– 使用mv
和cp
指令建立遺失的目錄;omnienv_no_such_command
– 修復goenv
、 nodenv
、 pyenv
和rbenv
的錯誤指令(例如: pyenv isntall
或goenv list
);open
– 在傳遞給open
位址前面新增http://
或建立一個新檔案或目錄並將其傳遞給open
;pip_install
– 透過新增--user
或在必要時加入sudo
來修復pip install
指令的權限問題;pip_unknown_command
– 修復錯誤的pip
指令,例如pip instatl/pip install
;php_s
– 當嘗試執行本機 php 伺服器時,將-s
替換為-S
;port_already_in_use
– 殺死綁定連接埠的程序;prove_recursively
– 使用目錄呼叫時新增-r
;python_command
– 當您嘗試執行不可執行/不帶./
python 腳本時,在前面新增python
;python_execute
– 執行 Python 檔案時附加缺少的.py
;python_module_error
– 透過嘗試pip install
模組來修復 ModuleNotFoundError;quotation_marks
– 修正了包含參數時'
和"
的不均勻使用;path_from_history
– 用歷史中類似的絕對路徑取代未找到的路徑;rails_migrations_pending
– 執行待處理的遷移;react_native_command_unrecognized
– 修復無法辨識的react-native
指令;remove_shell_prompt_literal
– 刪除前導 shell 提示字元$
,從文件複製指令時很常見;remove_trailing_cedilla
– 刪除尾隨的變音符號ç
,這是歐洲鍵盤佈局的常見拼字錯誤;rm_dir
– 當您嘗試刪除目錄時新增-rf
;scm_correction
– 修正錯誤的 scm,如hg log
到git log
;sed_unterminated_s
– 將缺少的 '/' 加入sed
s
命令中;sl_ls
– 將sl
改為ls
;ssh_known_hosts
– 出現警告時從known_hosts
中刪除主機;sudo
– 如果由於權限問題而失敗,則將sudo
加入到前一個命令中;sudo_command_from_user_path
– 使用sudo
從使用者$PATH
執行指令;switch_lang
– 將指令從本機佈局切換為 en;systemctl
– 正確排序令人困惑的systemctl
參數;terraform_init.py
– 在計畫或應用之前執行terraform init
;terraform_no_command.py
– 修復無法辨識的terraform
指令;test.py
– 運行pytest
而不是test.py
;touch
– 在「觸摸」之前建立遺失的目錄;tsuru_login
– 如果未通過身份驗證或會話過期,則執行tsuru login
;tsuru_not_command
– 修正錯誤的tsuru
指令,如tsuru shell
;tmux
– 修復tmux
指令;unknown_command
– 修復 hadoop hdfs 風格的“未知命令”,例如在hdfs dfs ls
上的命令中添加缺少的“-”;unsudo
– 如果進程拒絕以超級使用者權限執行,則從先前的命令中刪除sudo
。vagrant_up
– 啟動 vagrant 實例;whois
– 修復whois
指令;workon_doesnt_exists
– 修正了作業系統建議建立新的virtualenvwrapper
環境名稱。wrong_hyphen_before_subcommand
– 刪除位置不正確的連字符( apt-install
-> apt install
、 git-log
-> git log
等)yarn_alias
– 修正別名yarn
指令,如yarn ls
;yarn_command_not_found
– 修復拼字錯誤的yarn
指令;yarn_command_replaced
– 修復替換的yarn
命令;yarn_help
– 讓開啟yarn
文件變得更容易; 預設情況下,僅在特定平台上啟用以下規則:
apt_get
– 如果未安裝,則從 apt 安裝應用程式(需要python-commandnotfound
/ python3-commandnotfound
);apt_get_search
– 將嘗試使用apt-get
搜尋變更為使用apt-cache
搜尋;apt_invalid_operation
– 修復無效的apt
和apt-get
調用,如apt-get isntall vim
;apt_list_upgradable
– 幫助您在apt update
之後執行apt list --upgradable
;apt_upgrade
– 幫助您在apt list --upgradable
之後執行apt upgrade
;brew_cask_dependency
– 安裝 cask 依賴項;brew_install
– 修復了brew install
的公式名稱;brew_reinstall
– 將brew install <formula>
轉換為brew reinstall <formula>
;brew_link
– 若連結失敗則新增--overwrite --dry-run
;brew_uninstall
– 如果安裝了多個版本,請新增--force
到brew uninstall
;brew_unknown_command
– 修復錯誤的brew指令,例如brew docto/brew doctor
;brew_update_formula
– 將brew update <formula>
轉換為brew upgrade <formula>
;dnf_no_such_command
– 修復錯誤輸入的 DNF 指令;nixos_cmd_not_found
– 在 NixOS 上安裝應用程式;pacman
– 如果未安裝,則使用pacman
安裝應用程式(如果可用,則使用yay
、 pikaur
或yaourt
);pacman_invalid_option
– 將小寫的pacman
選項替換為大寫。pacman_not_found
– 用pacman
、 yay
、 pikaur
或yaourt
修復套件名稱。yum_invalid_operation
– 修復無效的yum
調用,例如yum isntall vim
;以下命令與The Fuck捆綁在一起,但預設不啟用:
git_push_force
– 將--force-with-lease
加入git push
(可能與git_push_pull
衝突);rm_root
– 將--no-preserve-root
加入rm -rf /
指令。 若要新增您自己的規則,請在~/.config/thefuck/rules
中建立名為your-rule-name.py
的檔案。規則檔案必須包含兩個函數:
match ( command : Command ) - > bool
get_new_command ( command : Command ) - > str | list [ str ]
此外,規則可以包含選用功能:
side_effect ( old_command : Command , fixed_command : str ) - > None
規則也可以包含可選變數enabled_by_default
、 requires_output
和priority
。
Command
有三個屬性: script
、 output
和script_parts
。您的規則不應更改Command
。
規則 api 在 3.0 中變更:要存取規則的設置,請使用from thefuck.conf import settings
匯入它
settings
是一個由~/.config/thefuck/settings.py
組裝而成的特殊對象,以及來自 env 的值(請參閱下面的更多內容)。
使用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
更多規則範例、規則實用函數、特定於應用程式/作業系統的幫助程式。
可以在檔案$XDG_CONFIG_HOME/thefuck/settings.py
中更改幾個The Fuck參數( $XDG_CONFIG_HOME
預設為~/.config
):
rules
– 啟用規則的列表,預設為thefuck.const.DEFAULT_RULES
;exclude_rules
– 停用規則列表,預設為[]
;require_confirmation
– 在執行新指令之前需要確認,預設為True
;wait_command
– 取得上一個指令輸出的最長時間(以秒為單位);no_colors
– 停用彩色輸出;priority
– 具有規則優先權的字典, priority
較低的規則會先符合;debug
– 啟用偵錯輸出,預設為False
;history_limit
– 將掃描多少歷史指令的數值,例如2000
;alter_history
– 將固定指令推送到歷史記錄,預設為True
;wait_slow_command
– 取得上一個命令輸出(如果它在slow_commands
清單中)的最長時間(以秒為單位);slow_commands
– 慢速命令清單;num_close_matches
– 建議的最大匹配數,預設為3
。excluded_search_path_prefixes
– 搜尋指令時要忽略的路徑前綴,預設為[]
。 settings.py
的範例:
rules = [ 'sudo' , 'no_command' ]
exclude_rules = [ 'git_push' ]
require_confirmation = True
wait_command = 10
no_colors = False
priority = { 'sudo' : 100 , 'no_command' : 9999 }
debug = False
history_limit = 9999
wait_slow_command = 20
slow_commands = [ 'react-native' , 'gradle' ]
num_close_matches = 5
或透過環境變數:
THEFUCK_RULES
– 啟用的規則列表,例如DEFAULT_RULES:rm_root
或sudo:no_command
;THEFUCK_EXCLUDE_RULES
– 停用規則列表,例如git_pull:git_push
;THEFUCK_REQUIRE_CONFIRMATION
– 在執行新指令之前需要確認, true/false
;THEFUCK_WAIT_COMMAND
– 取得上一個指令輸出的最長時間(以秒為單位);THEFUCK_NO_COLORS
– 停用彩色輸出, true/false
;THEFUCK_PRIORITY
– 規則的優先級,如no_command=9999:apt_get=100
, priority
較低的規則將首先匹配;THEFUCK_DEBUG
– 啟用偵錯輸出, true/false
;THEFUCK_HISTORY_LIMIT
– 將掃描多少歷史指令,例如2000
;THEFUCK_ALTER_HISTORY
– 將固定指令推送到歷史記錄true/false
;THEFUCK_WAIT_SLOW_COMMAND
– 取得上一個指令輸出(如果它在slow_commands
清單中)的最長時間(以秒為單位);THEFUCK_SLOW_COMMANDS
– 慢速指令列表,例如lein:gradle
;THEFUCK_NUM_CLOSE_MATCHES
– 建議的最大匹配數,例如5
。THEFUCK_EXCLUDED_SEARCH_PATH_PREFIXES
– 搜尋指令時要忽略的路徑前綴,預設為[]
。例如:
export THEFUCK_RULES= ' sudo:no_command '
export THEFUCK_EXCLUDE_RULES= ' git_pull:git_push '
export THEFUCK_REQUIRE_CONFIRMATION= ' true '
export THEFUCK_WAIT_COMMAND=10
export THEFUCK_NO_COLORS= ' false '
export THEFUCK_PRIORITY= ' no_command=9999:apt_get=100 '
export THEFUCK_HISTORY_LIMIT= ' 2000 '
export THEFUCK_NUM_CLOSE_MATCHES= ' 5 '
如果您想要製定一組特定的非公共規則,但仍想與其他人共用它們,請建立一個名為thefuck_contrib_*
的包,其結構如下:
thefuck_contrib_foo
thefuck_contrib_foo
rules
__init__.py
*third-party rules*
__init__.py
*third-party-utils*
setup.py
該死的會在rules
模組中找到規則。
The Fuck的預設行為需要時間來重新執行先前的命令。在即時模式下, The Fuck透過使用腳本記錄輸出,然後讀取日誌來節省時間。
目前,即時模式僅支援帶有 bash 或 zsh 的 Python 3。 zsh 的自動更正功能也需要停用才能正常運作。
若要啟用即時模式,請將--enable-experimental-instant-mode
加入.bashrc
、 .bash_profile
或.zshrc
中的別名初始化。
例如:
eval $( thefuck --alias --enable-experimental-instant-mode )
請參閱 CONTRIBUTING.md
項目許可證可在此處找到。