Saving current directory to bash history

后端 未结 9 1940
时光取名叫无心
时光取名叫无心 2020-11-28 19:29

I\'d like to save the current directory where the each command was issued alongside the command in the history. In order not to mess things up, I was thinking about adding

9条回答
  •  爱一瞬间的悲伤
    2020-11-28 20:21

    hcmnts - short function version

    Here is a short version in the form of a function. I've also posted a one-liner (the original) and a longer function with several added features. I like the function versions because they won't clobber other variables in your environment and they're much more readable than the one-liner. Read the entry for the one-liner for additional information on how this works and some limitations. I've posted each version in its own answer in order to keep things more organized.

    To use this one, save it in a file called hcmnts in a location like /usr/local/bin (you can chmod +x it if you want) then source it in your ~/.bashrc like this:

    source /usr/local/bin/hcmnts
    

    Comment out the line that sets hcmntextra if you don't want the date and time (or you can change its format or use some other command besides date).

    That's all there is to it.

    #!/bin/bash
    hcmnts() {
        # adds comments to bash history entries
    
        # the *S*hort version of hcmnt (which has many more features)
    
        # by Dennis Williamson
        # http://stackoverflow.com/questions/945288/saving-current-directory-to-bash-history
        # (thanks to Lajos Nagy for the idea)
    
        # INSTALLATION: source this file in your .bashrc
    
        # will not work if HISTTIMEFORMAT is used - use hcmntextra instead
        export HISTTIMEFORMAT=
    
        # HISTTIMEFORMAT still works in a subshell, however, since it gets unset automatically:
    
        #   $ htf="%Y-%m-%d %R "    # save it for re-use
        #   $ (HISTTIMEFORMAT=$htf; history 20)|grep 11:25
    
        local hcmnt
        local cwd
        local extra
    
        hcmnt=$(history 1)
        hcmnt="${hcmnt# *[0-9]*  }"
    
        if [[ ${hcmnt%% *} == "cd" ]]
        then
            cwd=$OLDPWD
        else
            cwd=$PWD
        fi
    
        extra=$(eval "$hcmntextra")
    
        hcmnt="${hcmnt% ### *}"
        hcmnt="$hcmnt ### ${extra:+$extra }$cwd"
    
        history -s "$hcmnt"
    }
    export hcmntextra='date +"%Y%m%d %R"'
    export PROMPT_COMMAND='hcmnts'
    

提交回复
热议问题