有没有简单的方法可以解决这个问题?我试图覆盖cd
命令,以便在bash历史记录中将其显示为cd <absolute_path>
。原始命令不会显示在历史记录中。
答案 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 -s
和fc -p
来解决此问题,但是解决这个问题似乎很麻烦。
您希望获得通用解决方案的评论不太可能得到满足,两个外壳上的历史记录系统由不同的命令驱动。