zoukankan      html  css  js  c++  java
  • 安利一个github上面的一个神级库thefuck,Linux命令敲错了,没关系,自动纠正你的命令

    没错就是这么神奇,名字相当噶性,thefuck。当你命令输入错误不要怕,直接来一句fuck,自动纠正你输入的命令。

    在你输入错误的命令的时候,忍俊不禁的想来一句fuck,没错你不仅可以嘴上说,命令里面可以可以来一下,他丫的就矫正了。

    保证原汁原味,直接上原文。

    这是库的地址https://github.com/nvbn/thefuck

    The Fuck 

    The Fuck is a magnificent app, inspired by a @liamosaur tweet, that corrects errors in previous console commands.

    Is The Fuck too slow? Try the experimental instant mode!

     

    More examples:

    ➜ 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
    ...

    If you're not afraid of blindly running corrected commands, the require_confirmation settings option can be disabled:

    ➜ 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
    ...

    Requirements

    • python (3.4+)
    • pip
    • python-dev

    Installation

    On OS X, you can install The Fuck via Homebrew (or via Linuxbrew on Linux):

    brew install thefuck

    On Ubuntu / Mint, install The Fuck with the following commands:

    sudo apt update
    sudo apt install python3-dev python3-pip python3-setuptools
    sudo pip3 install thefuck

    On FreeBSD, install The Fuck with the following commands:

    pkg install thefuck

    On ChromeOS, install The Fuck using chromebrew with the following command:

    crew install thefuck

    On other systems, install The Fuck by using pip:

    pip install thefuck

    Alternatively, you may use an OS package manager (OS X, Ubuntu, Arch).

    # It is recommended that you place this command in your .bash_profile.bashrc.zshrc or other startup script:

    eval $(thefuck --alias)
    # You can use whatever you want as an alias, like for Mondays:
    eval $(thefuck --alias FUCK)

    Or in your shell config (Bash, Zsh, Fish, Powershell, tcsh).

    Changes are only available in a new shell session. To make changes immediately available, run source ~/.bashrc (or your shell config file like .zshrc).

    To run fixed commands without confirmation, use the --yeah option (or just -y for short, or --hard if you're especially frustrated):

    fuck --yeah

    To fix commands recursively until succeeding, use the -r option:

    fuck -r

    Updating

    pip3 install thefuck --upgrade

    Note: Alias functionality was changed in v1.34 of The Fuck

    How it works

    The Fuck attempts to match the previous command with a rule. If a match is found, a new command is created using the matched rule and executed. The following rules are enabled by default:

    • adb_unknown_command – fixes misspelled commands like adb logcta;
    • ag_literal – adds -Q to ag when suggested;
    • aws_cli – fixes misspelled commands like aws dynamdb scan;
    • az_cli – fixes misspelled commands like az providers;
    • cargo – runs cargo build instead of cargo;
    • cargo_no_command – fixes wrongs commands like cargo buid;
    • cat_dir – replaces cat with ls when you try to cat a directory;
    • cd_correction – spellchecks and correct failed cd commands;
    • cd_mkdir – creates directories before cd'ing into them;
    • cd_parent – changes cd.. to cd ..;
    • chmod_x – add execution bit;
    • composer_not_command – fixes composer command name;
    • cp_omitting_directory – adds -a when you cp directory;
    • cpp11 – adds missing -std=c++11 to g++ or clang++;
    • dirty_untar – fixes tar x command that untarred in the current directory;
    • dirty_unzip – fixes unzip command that unzipped in the current directory;
    • django_south_ghost – adds --delete-ghost-migrations to failed because ghosts django south migration;
    • django_south_merge – adds --merge to inconsistent django south migration;
    • docker_login – executes a docker login and repeats the previous command;
    • docker_not_command – fixes wrong docker commands like docker tags;
    • docker_image_being_used_by_container ‐ removes the container that is using the image before removing the image;
    • dry – fixes repetitions like git git push;
    • fab_command_not_found – fix misspelled fabric commands;
    • fix_alt_space – replaces Alt+Space with Space character;
    • fix_file – opens a file with an error in your $EDITOR;
    • gem_unknown_command – fixes wrong gem commands;
    • git_add – fixes "pathspec 'foo' did not match any file(s) known to git.";
    • git_add_force – adds --force to git add <pathspec>... when paths are .gitignore'd;
    • git_bisect_usage – fixes git bisect strtgit bisect gooodgit bisect rset, etc. when bisecting;
    • git_branch_delete – changes git branch -d to git branch -D;
    • git_branch_exists – offers git branch -d foogit branch -D foo or git checkout foo when creating a branch that already exists;
    • git_branch_list – catches git branch list in place of git branch and removes created branch;
    • git_checkout – fixes branch name or creates new branch;
    • git_commit_amend – offers git commit --amend after previous commit;
    • git_commit_reset – offers git reset HEAD~ after previous commit;
    • git_diff_no_index – adds --no-index to previous git diff on untracked files;
    • git_diff_staged – adds --staged to previous git diff with unexpected output;
    • git_fix_stash – fixes git stash commands (misspelled subcommand and missing save);
    • git_flag_after_filename – fixes fatal: bad flag '...' after filename
    • git_help_aliased – fixes git help <alias> commands replacing with the aliased command;
    • git_merge – adds remote to branch names;
    • git_merge_unrelated – adds --allow-unrelated-histories when required
    • git_not_command – fixes wrong git commands like git brnch;
    • git_pull – sets upstream before executing previous git pull;
    • git_pull_clone – clones instead of pulling when the repo does not exist;
    • git_pull_uncommitted_changes – stashes changes before pulling and pops them afterwards;
    • git_push – adds --set-upstream origin $branch to previous failed git push;
    • git_push_different_branch_names – fixes pushes when local brach name does not match remote branch name;
    • git_push_pull – runs git pull when push was rejected;
    • git_push_without_commits – Creates an initial commit if you forget and only git add ., when setting up a new project;
    • git_rebase_no_changes – runs git rebase --skip instead of git rebase --continue when there are no changes;
    • git_remote_delete – replaces git remote delete remote_name with git remote remove remote_name;
    • git_rm_local_modifications – adds -f or --cached when you try to rm a locally modified file;
    • git_rm_recursive – adds -r when you try to rm a directory;
    • git_rm_staged – adds -f or --cached when you try to rm a file with staged changes
    • git_rebase_merge_dir – offers git rebase (--continue | --abort | --skip) or removing the .git/rebase-merge dir when a rebase is in progress;
    • git_remote_seturl_add – runs git remote add when git remote set_url on nonexistant remote;
    • git_stash – stashes your local modifications before rebasing or switching branch;
    • git_stash_pop – adds your local modifications before popping stash, then resets;
    • git_tag_force – adds --force to git tag <tagname> when the tag already exists;
    • git_two_dashes – adds a missing dash to commands like git commit -amend or git rebase -continue;
    • go_run – appends .go extension when compiling/running Go programs;
    • go_unknown_command – fixes wrong go commands, for example go bulid;
    • gradle_no_task – fixes not found or ambiguous gradle task;
    • gradle_wrapper – replaces gradle with ./gradlew;
    • grep_arguments_order – fixes grep arguments order for situations like grep -lir . test;
    • grep_recursive – adds -r when you try to grep directory;
    • grunt_task_not_found – fixes misspelled grunt commands;
    • gulp_not_task – fixes misspelled gulp tasks;
    • has_exists_script – prepends ./ when script/binary exists;
    • heroku_multiple_apps – add --app <app> to heroku commands like heroku pg;
    • heroku_not_command – fixes wrong heroku commands like heroku log;
    • history – tries to replace command with most similar command from history;
    • hostscli – tries to fix hostscli usage;
    • ifconfig_device_not_found – fixes wrong device names like wlan0 to wlp2s0;
    • java – removes .java extension when running Java programs;
    • javac – appends missing .java when compiling Java files;
    • lein_not_task – fixes wrong lein tasks like lein rpl;
    • long_form_help – changes -h to --help when the short form version is not supported
    • ln_no_hard_link – catches hard link creation on directories, suggest symbolic link;
    • ln_s_order – fixes ln -s arguments order;
    • ls_all – adds -A to ls when output is empty;
    • ls_lah – adds -lah to ls;
    • man – changes manual section;
    • man_no_space – fixes man commands without spaces, for example mandiff;
    • mercurial – fixes wrong hg commands;
    • missing_space_before_subcommand – fixes command with missing space like npminstall;
    • mkdir_p – adds -p when you try to create a directory without parent;
    • mvn_no_command – adds clean package to mvn;
    • mvn_unknown_lifecycle_phase – fixes misspelled lifecycle phases with mvn;
    • npm_missing_script – fixes npm custom script name in npm run-script <script>;
    • npm_run_script – adds missing run-script for custom npm scripts;
    • npm_wrong_command – fixes wrong npm commands like npm urgrade;
    • no_command – fixes wrong console commands, for example vom/vim;
    • no_such_file – creates missing directories with mv and cp commands;
    • open – either prepends http:// to address passed to open or create a new file or directory and passes it to open;
    • pip_install – fixes permission issues with pip install commands by adding --user or prepending sudo if necessary;
    • pip_unknown_command – fixes wrong pip commands, for example pip instatl/pip install;
    • php_s – replaces -s by -S when trying to run a local php server;
    • port_already_in_use – kills process that bound port;
    • prove_recursively – adds -r when called with directory;
    • pyenv_no_such_command – fixes wrong pyenv commands like pyenv isntall or pyenv list;
    • python_command – prepends python when you try to run non-executable/without ./ python script;
    • python_execute – appends missing .py when executing Python files;
    • quotation_marks – fixes uneven usage of ' and " when containing args';
    • path_from_history – replaces not found path with similar absolute path from history;
    • react_native_command_unrecognized – fixes unrecognized react-native commands;
    • remove_trailing_cedilla – remove trailling cedillas ç, a common typo for european keyboard layouts;
    • rm_dir – adds -rf when you try to remove a directory;
    • scm_correction – corrects wrong scm like hg log to git log;
    • sed_unterminated_s – adds missing '/' to sed's s commands;
    • sl_ls – changes sl to ls;
    • ssh_known_hosts – removes host from known_hosts on warning;
    • sudo – prepends sudo to previous command if it failed because of permissions;
    • sudo_command_from_user_path – runs commands from users $PATH with sudo;
    • switch_lang – switches command from your local layout to en;
    • systemctl – correctly orders parameters of confusing systemctl;
    • terraform_init.py – run terraform init before plan or apply;
    • test.py – runs py.test instead of test.py;
    • touch – creates missing directories before "touching";
    • tsuru_login – runs tsuru login if not authenticated or session expired;
    • tsuru_not_command – fixes wrong tsuru commands like tsuru shell;
    • tmux – fixes tmux commands;
    • unknown_command – fixes hadoop hdfs-style "unknown command", for example adds missing '-' to the command on hdfs dfs ls;
    • unsudo – removes sudo from previous command if a process refuses to run on super user privilege.
    • vagrant_up – starts up the vagrant instance;
    • whois – fixes whois command;
    • workon_doesnt_exists – fixes virtualenvwrapper env name os suggests to create new.
    • yarn_alias – fixes aliased yarn commands like yarn ls;
    • yarn_command_not_found – fixes misspelled yarn commands;
    • yarn_command_replaced – fixes replaced yarn commands;
    • yarn_help – makes it easier to open yarn documentation;

    The following rules are enabled by default on specific platforms only:

    • apt_get – installs app from apt if it not installed (requires python-commandnotfound / python3-commandnotfound);
    • apt_get_search – changes trying to search using apt-get with searching using apt-cache;
    • apt_invalid_operation – fixes invalid apt and apt-get calls, like apt-get isntall vim;
    • apt_list_upgradable – helps you run apt list --upgradable after apt update;
    • apt_upgrade – helps you run apt upgrade after apt list --upgradable;
    • brew_cask_dependency – installs cask dependencies;
    • brew_install – fixes formula name for brew install;
    • brew_reinstall – turns brew install <formula> into brew reinstall <formula>;
    • brew_link – adds --overwrite --dry-run if linking fails;
    • brew_uninstall – adds --force to brew uninstall if multiple versions were installed;
    • brew_unknown_command – fixes wrong brew commands, for example brew docto/brew doctor;
    • brew_update_formula – turns brew update <formula> into brew upgrade <formula>;
    • dnf_no_such_command – fixes mistyped DNF commands;
    • nixos_cmd_not_found – installs apps on NixOS;
    • pacman – installs app with pacman if it is not installed (uses yay or yaourt if available);
    • pacman_not_found – fixes package name with pacmanyay or yaourt.
    • yum_invalid_operation – fixes invalid yum calls, like yum isntall vim;

    The following commands are bundled with The Fuck, but are not enabled by default:

    • git_push_force – adds --force-with-lease to a git push (may conflict with git_push_pull);
    • rm_root – adds --no-preserve-root to rm -rf / command.

    Creating your own rules

    To add your own rule, create a file named your-rule-name.py in ~/.config/thefuck/rules. The rule file must contain two functions:

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

    Additionally, rules can contain optional functions:

    side_effect(old_command: Command, fixed_command: str) -> None

    Rules can also contain the optional variables enabled_by_defaultrequires_output and priority.

    Command has three attributes: scriptoutput and script_parts. Your rule should not change Command.

    Rules api changed in 3.0: To access a rule's settings, import it with from thefuck.conf import settings

    settings is a special object assembled from ~/.config/thefuck/settings.py, and values from env (see more below).

    A simple example rule for running a script with 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

    More examples of rulesutility functions for rulesapp/os-specific helpers.

    Settings

    Several The Fuck parameters can be changed in the file $XDG_CONFIG_HOME/thefuck/settings.py ($XDG_CONFIG_HOME defaults to ~/.config):

    • rules – list of enabled rules, by default thefuck.conf.DEFAULT_RULES;
    • exclude_rules – list of disabled rules, by default [];
    • require_confirmation – requires confirmation before running new command, by default True;
    • wait_command – max amount of time in seconds for getting previous command output;
    • no_colors – disable colored output;
    • priority – dict with rules priorities, rule with lower priority will be matched first;
    • debug – enables debug output, by default False;
    • history_limit – numeric value of how many history commands will be scanned, like 2000;
    • alter_history – push fixed command to history, by default True;
    • wait_slow_command – max amount of time in seconds for getting previous command output if it in slow_commands list;
    • slow_commands – list of slow commands;
    • num_close_matches – maximum number of close matches to suggest, by default 3.

    An example of 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

    Or via environment variables:

    • THEFUCK_RULES – list of enabled rules, like DEFAULT_RULES:rm_root or sudo:no_command;
    • THEFUCK_EXCLUDE_RULES – list of disabled rules, like git_pull:git_push;
    • THEFUCK_REQUIRE_CONFIRMATION – require confirmation before running new command, true/false;
    • THEFUCK_WAIT_COMMAND – max amount of time in seconds for getting previous command output;
    • THEFUCK_NO_COLORS – disable colored output, true/false;
    • THEFUCK_PRIORITY – priority of the rules, like no_command=9999:apt_get=100, rule with lower priority will be matched first;
    • THEFUCK_DEBUG – enables debug output, true/false;
    • THEFUCK_HISTORY_LIMIT – how many history commands will be scanned, like 2000;
    • THEFUCK_ALTER_HISTORY – push fixed command to history true/false;
    • THEFUCK_WAIT_SLOW_COMMAND – max amount of time in seconds for getting previous command output if it in slow_commands list;
    • THEFUCK_SLOW_COMMANDS – list of slow commands, like lein:gradle;
    • THEFUCK_NUM_CLOSE_MATCHES – maximum number of close matches to suggest, like 5.

    For example:

    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'

    Third-party packages with rules

    If you'd like to make a specific set of non-public rules, but would still like to share them with others, create a package named thefuck_contrib_* with the following structure:

    thefuck_contrib_foo
      thefuck_contrib_foo
        rules
          __init__.py
          *third-party rules*
        __init__.py
        *third-party-utils*
      setup.py
    

    The Fuck will find rules located in the rules module.

    Experimental instant mode

    The default behavior of The Fuck requires time to re-run previous commands. When in instant mode, The Fuck saves time by logging output with script, then reading the log.

    gif with instant mode

    Currently, instant mode only supports Python 3 with bash or zsh. zsh's autocorrect function also needs to be disabled in order for thefuck to work properly.

    To enable instant mode, add --enable-experimental-instant-mode to the alias initialization in .bashrc.bash_profile or .zshrc.

    For example:

    eval $(thefuck --alias --enable-experimental-instant-mode)

    Developing

    See CONTRIBUTING.md

    License MIT

    Project License can be found here.

  • 相关阅读:
    POJ--1797 Heavy Transportation (最短路)
    Luogu--3381 【模板】最小费用最大流
    51Nod--1295 XOR key (可持久化tire树)
    HDU--5269 ZYB loves Xor I (字典树)
    [Windows Server 2008] ASP.net安装方法
    [Windows Server 2008] 安装IIS7.5及FTP
    [Windows Server 2012] Tomcat安装方法
    [Windows Server 2012] Filezilla安装方法
    [Windows Server 2012] 安装护卫神·主机管理系统
    [Windows Server 2012] 安装SQL Server 2012
  • 原文地址:https://www.cnblogs.com/landv/p/11713400.html
Copyright © 2011-2022 走看看