4个版本 (稳定)

2.0.1 2021年9月2日
2.0.0 2021年8月31日
1.0.0 2021年6月1日
0.1.0 2020年10月12日

#286操作系统

MIT 协议

72KB
2K SLoC

histdb-rs

Build Status crates.io

为zsh提供更好的历史管理。基于https://github.com/larkery/zsh-histdb中的想法。

许可协议:MIT。

它主要是由于sqlite合并经常出问题,使用sqlite数据库似乎过于冗余,因此编写的。

该工具只是为每个主机编写CSV文件,这使得通过git同步它们变得非常简单。

几乎与zsh-histdb具有相同的功能集

  • 命令的开始和结束时间
  • 运行命令的工作目录
  • 运行命令的计算机的主机名
  • 基于UUID的唯一会话ID
  • 命令的退出状态
  • 从zsh histfile和zsh-histdb sqlite数据库导入

安装

您可以从发行页面安装正确的二进制文件,或者运行

cargo install histdb-rs

Archlinux

从aur安装: https://aur.archlinux.org/packages/histdb-rs/

首次启动

安装histdb-rs后,您需要启动服务器

histdb-rs server

默认情况下,服务器将在前台运行。

要停止服务器,您可以运行以下命令

histdb-rs stop

或者发送SIGTERM/SIGINT(Ctrl+C)来停止服务器。

您还可以使用histdb-rs.service中的systemd单元文件,将其复制到"$HOME/.config/systemd并使用以下命令启用/启动

systemctl --user daemon-reload
systemctl --user enable histdb-rs.service
systemctl --user start histdb-rs.service

之后,您可以将以下内容添加到您的.zshrc以为您启用histdb-rs。

eval "$(histdb-rs init)"

您可以在当前shell中运行该命令以启用histdb-rs或重启shell。

用法

默认命令的帮助输出

histdb-rs 2.0.0

USAGE:
    histdb-rs [FLAGS] [OPTIONS] [SUBCOMMAND]

FLAGS:
        --all-hosts
            Print all hosts

        --disable-formatting
            Disable fancy formatting

        --filter-failed
            Filter out failed commands (return code not 0)

    -h, --help
            Prints help information

        --hide-header
            Disable printing of header

    -i, --in
            Only print entries that have been executed in the current directory

        --no-subdirs
            Exclude subdirectories when filtering by folder

        --show-duration
            Show how long the command ran

        --show-host
            Print host column

        --show-pwd
            Show directory in which the command was run

        --show-session
            Show session id for command

        --show-status
            Print returncode of command

    -V, --version
            Prints version information


OPTIONS:
    -c, --command <command>
            Only print entries beginning with the given command

    -t, --text <command-text>
            Only print entries containing the given regex

        --config-path <config-path>
            Path to the socket for communication with the server [env: HISTDBRS_CONFIG_PATH=]  [default:
            /home/athaller/.config/histdb-rs/config.toml]
    -d, --data-dir <data-dir>
            Path to folder in which to store the history files [default: /home/athaller/.local/share/histdb-rs]

    -e, --entries-count <entries-count>
            How many entries to print [default: 25]

        --find-status <find-status>
            Find commands with the given return code

    -f, --folder <folder>
            Only print entries that have been executed in the given directory

        --hostname <hostname>
            Filter by given hostname

        --session <session>
            Filter by given session


SUBCOMMANDS:
    bench
            Run benchmark against server

    disable
            Disable history recording for current session

    enable
            Enable history recording for current session

    help
            Prints this message or the help of the given subcommand(s)

    import
            Import entries from existing histdb sqlite or zsh histfile

    init
            Print out shell functions needed by histdb and set current session id

    precmd
            Finish command for current session

    server
            Start the server

    session_id
            Get new session id

    stop
            Stop the server

    zshaddhistory
            Add new command for current session

最基本的命令是仅运行histdb-rs而不带任何参数

» histdb-rs
 tmn    cmd
 14:28  cargo +nightly install --path .

这将打印当前机器的历史记录。默认情况下,只会打印最后25条记录。

Git

Histdb-rs 被编写用于方便地在多台机器之间同步历史记录。为此,histdb-rs将为每台机器写入单独的历史文件。

如果您想在机器之间同步,请进入数据目录(默认为$HOME/.local/share/histdb-rs)并运行以下命令

git init
git add :/
git commit -m "Initial commit"

之后,您可以配置源并开始在不同机器之间同步文件。我们没有实现自动提交/自动同步,因为我们不希望每次运行命令时都进行提交。这可能在将来改变。

配置

还有方法可以配置histdb-rs。默认情况下,配置存储在$HOME/.config/histdb-rs/config.toml下。可以使用--config-path选项指定不同的路径。

默认配置如下所示

# When true will not save commands that start with a space.
# Default: true
ignore_space = true

# The log level to run under.
# Default: Warn
log_level = "Warn"

导入

zsh-histdb

» histdb import histdb -h
histdb-rs-import-histdb 0.1.0
Import entries from existing histdb sqlite file

USAGE:
    histdb-rs import histdb [OPTIONS]

FLAGS:
    -h, --help
            Prints help information


OPTIONS:
    -d, --data-dir <data-dir>
            Path to folder in which to store the history files [default: $HOME/.local/share/histdb-rs]

    -i, --import-file <import-file>
            Path to the existing histdb sqlite file [default: $HOME/.histdb/zsh-history.db]

如果默认的data-dirimport-file都很好,您可以只运行以下命令

histdb import histdb

这将为sqlite数据库中找到的每个hostname创建CSV文件。它将为sqlite中找到的每个唯一会话创建一个UUID,因此同一会话中运行的命令应该仍然分组在一起。

zsh histfile

» histdb import histfile -h
histdb-rs-import-histfile 0.1.0
Import entries from existing zsh histfile

USAGE:
    histdb-rs import histfile [OPTIONS]

FLAGS:
    -h, --help
            Prints help information


OPTIONS:
    -d, --data-dir <data-dir>
            Path to folder in which to store the history files [default: $HOME/.local/share/histdb-rs]

    -i, --import-file <import-file>
            Path to the existing zsh histfile file [default: $HOME/.histfile]

如果默认的data-dirimport-file都很好,您可以只运行以下命令

histdb import histfile

由于histfile中存储的信息相当有限,以下信息将被存储

  • time_finished将从histfile中解析
  • result(退出代码)将从histfile中解析
  • command将从histfile中解析
  • time_start将复制自time_finished
  • hostname将使用当前机器的计算机名
  • pwd将设置为当前用户的家目录
  • session_id将被生成并用于从histfile导入的所有命令
  • user将使用运行导入的当前用户

贡献

我对这个工具对我工作的效果很满意,所以不会再进一步扩展它,但对功能和修复的贡献总是受欢迎的!

替代方案

依赖关系

~10–23MB
~313K SLoC