覆盖cd命令以保存bash zsh历史记录的绝对路径

时间:2018-10-10 15:40:42

标签: bash shell zsh

有没有简单的方法可以解决这个问题?我试图覆盖cd命令,以便在bash历史记录中将其显示为cd <absolute_path>。原始命令不会显示在历史记录中。

1 个答案:

答案 0 :(得分:1)

我认为这是您想要的效果:

之前:

/Users/fred> cd ..
/Users> cd
/Users/fred> history
...
438  cd ..
439  cd
440  history

之后:

/Users/fred> source gash.sh      #   Magic happens here
/Users/fred> cd ..
/Users> cd
/Users/fred> history
...
501  source gash.sh
502  cd /Users
503  cd /Users/fred
504  history

您可以在bash中使用函数,此处定义为 gash.sh:

# Must be 'sourced'

cd() {
    if (( $# == 0 )); then
        builtin cd                # This calls the shell version of cd
    else
        builtin cd "$@"           # This calls the shell version of cd
    fi
    msg="cd $(pwd)"
    history -s "$msg"             # This writes to the history 'file'
}

编辑:

zsh中,将{{1}没有的history -s替换为zsh。然后的问题是键入的命令和新命令都出现在历史记录中。您可能可以使用print -sfc -p来解决此问题,但是解决这个问题似乎很麻烦。

您希望获得通用解决方案的评论不太可能得到满足,两个外壳上的历史记录系统由不同的命令驱动。