跳转到主要内容

Rash 进步 Shell 历史

项目描述

这是什么?

Shell 历史很有用。但如果它能记录更多数据点,那就更有用了。例如,如果您忘记为特定项目运行哪个 make 目标,您会希望搜索特定目录中运行的 Shell 命令。您能这样做不是很好吗?

rash search --cwd . "make*"

RASH 记录了许多数据点,并存储在 SQLite 数据库中。以下是记录的信息列表 [1]

  1. 当前目录 ($PWD)。

  2. 退出代码 ($?)

  3. 管道退出代码 ($PIPESTATUS / $pipestatus)

  4. 命令开始和终止的时间。

  5. 环境变量 ($PATH$SHELL$TERM$HOST 等.)

  6. 真实终端。使用$TERM来模拟程序。RASH可以检测你是否在tmux、byobu、screen、gnome-terminal等中。

  7. 会话信息。如果你在一些终端中来回切换,RASH不会丢失你在哪个终端中运行的命令顺序。

RASH还有一个交互式搜索界面。你可以边打字边看到搜索结果。如果你使用zsh,你可以立即执行搜索结果。

RASH interactive search interface

安装

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 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模块

平台

类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 recordrash 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。

由以下提供支持

AWS AWS 云计算和安全赞助商 Datadog Datadog 监控 Fastly Fastly CDN Google Google 下载分析 Microsoft Microsoft PSF赞助商 Pingdom Pingdom 监控 Sentry Sentry 错误日志 StatusPage StatusPage 状态页面