Rash 进步 Shell 历史
项目描述
这是什么?
Shell 历史很有用。但如果它能记录更多数据点,那就更有用了。例如,如果您忘记为特定项目运行哪个 make 目标,您会希望搜索特定目录中运行的 Shell 命令。您能这样做不是很好吗?
rash search --cwd . "make*"
RASH 记录了许多数据点,并存储在 SQLite 数据库中。以下是记录的信息列表 [1]。
当前目录 ($PWD)。
退出代码 ($?)
管道退出代码 ($PIPESTATUS / $pipestatus)
命令开始和终止的时间。
环境变量 ($PATH、$SHELL、$TERM、$HOST 等.)
真实终端。使用$TERM来模拟程序。RASH可以检测你是否在tmux、byobu、screen、gnome-terminal等中。
会话信息。如果你在一些终端中来回切换,RASH不会丢失你在哪个终端中运行的命令顺序。
RASH还有一个交互式搜索界面。你可以边打字边看到搜索结果。如果你使用zsh,你可以立即执行搜索结果。
安装
RASH是用Python编写的。安装的最简单方法是使用pip(如果你愿意,也可以使用easy_install)。你可能需要使用sudo在系统目录中安装它。
pip install rash pip install percol # if you want interactive search feature
如果你使用virtualenv安装RASH,在切换环境时可能会遇到麻烦。在这种情况下,将rash可执行文件的全路径创建别名是安全的。
alias rash="PATH/TO/VIRTUALENV/bin/rash"
如果你想使用开发版本,只需克隆git仓库,并在你的RC文件中添加以下内容。
alias rash="PATH/TO/RASH/rash_cli.py"
设置
将其添加到你的.zshrc或.bashrc。这就完成了。
eval "$(rash init)"
有关更多信息,请参阅rash init --help。
用法
搜索历史 – rash search
当你使用RASH累积了shell历史后,就是时候利用历史了!请参阅rash search --help以获取详细信息。以下是一些示例。
忘记如何运行当前项目的自动化测试了吗?
rash search --cwd . --include-pattern "*test*" --include-pattern "tox*"
一周内你运行的所有git命令。
rash search --time-after "1 week ago" "git*"
当前项目中运行的成功且耗时超过30分钟的一些复杂任务。
rash search --cwd-under . --include-exit-code 0 --duration-longer-than 30m
在更改到某个目录后我做了什么?
rash search --after-context 5 "cd SOME-DIRECTORY"
在这个目录中运行的所有失败命令。
rash search --cwd . --exclude-exit-code 0
计算一天内运行的命令数量
rash search --limit -1 --no-unique --time-after "1 day ago" | wc -l
显示详细信息 – rash show
如果你给--with-command-id传递给rash search命令,它将打印每个命令历史的ID号。
% rash search --with-command-id --limit 5 "*git*" 359 git log 1253 git help clone 1677 git help diff 1678 git diff --word-diff 1780 git merge
你可以使用rash show命令查看与命令相关的所有信息
rash show 1677
交互式搜索 – rash isearch
使用命令行搜索历史不是很快。你可以使用rash isearch命令来交互式地搜索历史,并且在你打字时立即看到结果。
你需要percol来使用此功能。
zsh用户可以设置如下键绑定
# Type `Ctrl-x r` to start isearch bindkey "^Xr" rash-zle-isearch
在rc文件中定义此函数可能很有用,它对bash用户也是可用的。
rash-isearch(){ eval "$(rash isearch)" }
依赖关系
RASH在Python 2.6、2.7和3.2上进行了测试。然而,由于一些依赖项不与Python 3兼容,当与Python 3一起使用时,一些功能可能缺失。
Python模块
这些模块不支持Python 3。如果你使用Python 3,它们不会安装,并且相关的功能被禁用。
平台
- 类UNIX系统
RASH已在Linux上进行了测试,并且我在Linux上使用它。它应该在像BSD这样的其他类UNIX系统上工作。
- Mac OS
我想它会工作。尚未测试。
- MS Windows
可能没有人想在Windows中使用shell工具,但我尽量避免使用特定于平台的工具。只有守护进程启动器在Windows上不会工作,但有多种方法可以避免使用它。请参阅rash init --help。
shell
RASH目前支持zsh和bash。
设计原则
RASH的设计注重简洁。从数据转换到看到搜索结果,包含几个阶段,并由不同的进程完成。
首先,rash record命令将shell历史记录以原始JSON格式记录下来。这部分程序不与数据库交互,从而使得过程非常快速。由于此命令中没有复杂的转换,未来版本可能最好将其完全重写为shell函数。
其次,rash daemon在后台运行,监视存储JSON记录的目录。当接收到JSON记录时,它会将数据插入到数据库中。
rash record和rash daemon可以通过简单的shell片段eval $(rash init)进行设置。
最后,您可以使用搜索界面(如rash search)搜索命令历史。由于您不需要读取分散的文件中的所有JSON记录,因此此搜索非常快速。
+-------+ +--------+ +--------+ +--------+ | Shell | | Raw | | SQLite | | Search | | hooks |-------->| JSON |-------->| DB |-------->| result | +-------+ | record | +--------+ +--------+ +--------+ `rash record` `rash daemon` `rash search` `rash show` \------------------------------/ \------------/ `rash init` setups them search interface
许可
RASH遵循GPL v3许可证。有关详细信息,请参阅COPYING。
项目详情
rash-0.1.3.tar.gz的哈希值
算法 | 哈希摘要 | |
---|---|---|
SHA256 | 39fdd7b7138de734a533e889dacc9a07bd49d43a0ed9ee913eb1bbd37d2f44fc |
|
MD5 | cb30ebcfca2b351b04460815a8a331d7 |
|
BLAKE2b-256 | 294e56a727c9bd98f244bc43044b57256c9080c9dd6f1c87df3f7554d40c5930 |