跳转到主要内容

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。

项目详情


下载文件

下载适用于您平台的文件。如果您不确定要选择哪个,请了解有关安装包的更多信息。

源分布

rash-0.1.3.tar.gz (48.0 kB 查看哈希值)

上传时间

由以下提供支持

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