Using bash history to get a previous command, copy it and then 'run' it but with the command commented

后端 未结 10 1029
伪装坚强ぢ
伪装坚强ぢ 2021-01-29 20:34

Just a question to improve my bash skills. I always do this:

$ history | grep some_long_command

...
...
123 some_long_command1.........
124 some_l         


        
相关标签:
10条回答
  • 2021-01-29 21:12

    I'd suggest instead of using the history command, you use ctrl+r and start typing that command. When you press an arrow key as if to go to modify it, it will drop out of autocomplete recognition, and will let you edit before running.

    UPDATE: also, if you want to cycle through the different commands that contain the string you just typed, keep on pressing ctrl+r

    0 讨论(0)
  • 2021-01-29 21:18

    You can also try fc command to edit the command in the history.

    WIKI says,

    ​fc​ is a standard program on Unix that lists or edits and reexecutes, commands previously entered to an interactive shell. fc is a built-in command in the bash shell; help fc will show usage information.


    Apart from reverse-incremental search(Ctrl+R), we have some more bash shortcuts:

    From man bash:

    previous-history (C-p)
        Fetch the previous command from the history list, moving back in the list. 
    next-history (C-n)
        Fetch the next command from the history list, moving forward in the list. 
    beginning-of-history (M-<)
        Move to the first line in the history. 
    end-of-history (M->)
        Move to the end of the input history, i.e., the line currently being entered. 
    reverse-search-history (C-r)
        Search backward starting at the current line and moving 'up' through the history as necessary. This is an incremental search. 
    forward-search-history (C-s)
        Search forward starting at the current line and moving 'down' through the history as necessary. This is an incremental search. 
    non-incremental-reverse-search-history (M-p)
        Search backward through the history starting at the current line using a non-incremental search for a string supplied by the user. 
    non-incremental-forward-search-history (M-n)
        Search forward through the history using a non-incremental search for a string supplied by the user.
    yank-nth-arg (M-C-y)
        Insert the first argument to the previous command (usually the second word on the previous line) at point. With an argument n, insert the nth word from the previous command (the words in the previous command begin with word 0). A negative argument inserts the nth word from the end of the previous command. Once the argument n is computed, the argument is extracted as if the "!n" history expansion had been specified.
    yank-last-arg (M-., M-_)
        Insert the last argument to the previous command (the last word of the previous history entry). With an argument, behave exactly like yank-nth-arg. Successive calls to yank-last-arg move back through the history list, inserting the last argument of each line in turn. The history expansion facilities are used to extract the last argument, as if the "!$" history expansion had been specified. 
    shell-expand-line (M-C-e)
        Expand the line as the shell does. This performs alias and history expansion as well as all of the shell word expansions. See HISTORY EXPANSION below for a description of history expansion. 
    history-expand-line (M-^)
        Perform history expansion on the current line. See HISTORY EXPANSION below for a description of history expansion.
    insert-last-argument (M-., M-_)
        A synonym for yank-last-arg. 
    operate-and-get-next (C-o)
        Accept the current line for execution and fetch the next line relative to the current line from the history for editing. Any argument is ignored. 
    edit-and-execute-command (C-xC-e)
        Invoke an editor on the current command line, and execute the result as shell commands.
    
    0 讨论(0)
  • 2021-01-29 21:21

    Put

    alias r='fc -s'

    in your .bashrc (home dir) then you can just type in

    r <whatever>
    

    at the command prompt and you will execute a copy of the last <whatever> command (same params) that is in your history. just hit up arrow to see what you have executed if you feel the need.

    0 讨论(0)
  • 2021-01-29 21:23

    You can also put

    shopt -s histverify
    

    in your .bash_profile, which causes any history expansion to appear on your command line without running it, allowing you to edit before doing so.

    0 讨论(0)
提交回复
热议问题