Sim*_*mon 17 bash zsh shell history
我发现我在一个集合目录中的一个项目上做了很多工作。有时——几个月后——我需要在那个项目上重做一些事情,但我不记得我做了什么。我使用 mercurial 或 git 来跟踪对文件的更改,但我希望能够记住我在该目录中发出的命令。
搜索我的 shell 历史记录并不是很有用。我已经将所有内容记录到我的 .*_history 文件中,但我想要一个我在 ~/foo/bar 中所做的事情的列表,而不是我那周所做的所有其他(百万)事情。我可能甚至不记得我上次在那个特定项目上工作的月份。
有没有人知道我使用过的所有 shell 命令的项目目录日志文件?我正在设想一个类似的命令:
在我的项目上工作
...这会将 shell 日志文件设置为 ~/myproject/.history.log,从该日志文件加载以前的历史记录,并可能更新我的提示以告诉我我正在处理的目录(例如 vcprompt 以提供版本控制信息)。
有没有这样的东西?
小智 5
如果您还没有弄清楚这一点:您正在寻找的是优秀的virtualenvwrapper包。它是 python 的virtualenv (go figure)的包装器,虽然在处理 python 环境时通常会提到它,但它实际上是一个非常通用的工具,可以满足您的用例。
pip install virtualenvwrapper
Run Code Online (Sandbox Code Playgroud)
或者
easy_install virtualenvwrapper
Run Code Online (Sandbox Code Playgroud)
并将初始化内容添加到您的 shell 配置 ( ~/.zshrc, ~/.bashrc)
export WORKON_HOME=$HOME/.virtualenvs
export PROJECT_HOME=$WORKON_HOME/projects
export PIP_VIRTUALENV_BASE=$WORKON_HOME
export PIP_RESPECT_VIRTUALENV=true
source /usr/local/bin/virtualenvwrapper.sh
Run Code Online (Sandbox Code Playgroud)
# create your env
mkvirtualenv my_project
# edit per project hooks
vim ~/.virtualenvs/my_project/bin/{postactivate,preactivate,predeactivate,etc}
# work in this env
workon my_project
Run Code Online (Sandbox Code Playgroud)
你也有通用的钩子,~/.virtualenvs/{postactivate,postdeactivate,etc}每次你调用它workon any_project。
因此,例如,export HISTFILE="$VIRTUAL_ENV/bash_history"在~/virtualenvs/postactivate钩子中有一行意味着$HISTFILE每次都会将变量扩展到不同的项目。
至少在 bash 中,仅在 shell 实例启动时才查阅 HISTFILE。每个目录的想法在这里不起作用,除非上面的“workon”示例创建了一个 shell 实例。
也许你可以看看类似的东西
alias workon='script ./.history.log'
Run Code Online (Sandbox Code Playgroud)
但脚本也会创建一个子shell。
简而言之,您可能需要混乱级别的子 shell 才能使其正常工作。