2 个稳定版本
2.1.0 | 2022年7月4日 |
---|---|
2.0.1 | 2021年10月5日 |
#719 in 数据库接口
73KB
2K SLoC
hstdb
为 zsh 提供更好的历史管理。基于来自 https://github.com/larkery/zsh-histdb 的想法。
遵循 MIT 许可协议。
主要是因为 sqlite 合并对我而言崩溃得太多次,使用 sqlite 数据库似乎有些过度。
该工具只是为每个主机写入 CSV 文件,这使得通过 git 同步它们变得非常简单。
功能几乎与 zsh-histdb 相同
- 命令的开始和结束时间
- 运行命令的工作目录
- 运行命令的机器的计算机名
- 基于 UUID 的唯一会话 ID
- 命令的退出状态
- 从 zsh histfile 和 zsh-histdb sqlite 数据库导入
安装
您可以从发布页面安装相应的二进制文件,或者运行
cargo install hstdb
Archlinux
从 aur 安装: https://aur.archlinux.org/packages/hstdb/
首次启动
在安装 hstdb 之后,您需要启动服务器
hstdb server
默认情况下,服务器将在前台运行。
要停止服务器,您可以运行以下命令
hstdb stop
或者发送 SIGTERM/SIGINT (Ctrl+C) 来停止服务器。
您还可以使用位于 hstdb.service
的 systemd 单元文件,您可以将其复制到 "$HOME/.config/systemd
并使用以下命令启用/启动
systemctl --user daemon-reload
systemctl --user enable hstdb.service
systemctl --user start hstdb.service
之后,您可以将以下内容添加到您的 .zshrc
中以启用您 shell 中的 hstdb。
eval "$(hstdb init)"
您可以在当前 shell 中运行此命令以启用 hstdb 或重新启动 shell。
用法
默认命令的帮助输出
hstdb 2.0.0
USAGE:
hstdb [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/hstdb/config.toml]
-d, --data-dir <data-dir>
Path to folder in which to store the history files [default: /home/athaller/.local/share/hstdb]
-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
最基本的命令是运行不带任何参数的 hstdb
» hstdb
tmn cmd
14:28 cargo +nightly install --path .
这将打印当前机器的历史记录。默认情况下,只会打印最后 25 条条目。
Git
hstdb被编写用于轻松地在多台机器之间同步历史记录。为此,hstdb将为每台机器写入单独的历史记录文件。
如果您想在机器之间同步,请转到数据目录(默认为$HOME/.local/share/hstdb
)并运行以下命令
git init
git add :/
git commit -m "Initial commit"
之后,您可以为源进行配置并开始在不同机器之间同步文件。我们没有实现自动提交/自动同步,因为我们不希望在每次运行命令时都有提交。这可能在将来被改变。
配置
还可以配置hstdb
。默认情况下,配置存储在$HOME/.config/hstdb/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
hstdb-import-histdb 0.1.0
Import entries from existing histdb sqlite file
USAGE:
hstdb 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/hstdb]
-i, --import-file <import-file>
Path to the existing histdb sqlite file [default: $HOME/.histdb/zsh-history.db]
如果默认的data-dir
和import-file
设置都很好,您只需运行以下命令
histdb import histdb
这将为在sqlite数据库中找到的每个hostname
创建CSV文件。它将为在sqlite中找到的每个唯一会话创建一个UUID,因此同一会话中运行的命令应该仍然组合在一起。
zsh histfile
» histdb import histfile -h
hstdb-import-histfile 0.1.0
Import entries from existing zsh histfile
USAGE:
hstdb 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/hstdb]
-i, --import-file <import-file>
Path to the existing zsh histfile file [default: $HOME/.histfile]
如果默认的data-dir
和import-file
设置都很好,您只需运行以下命令
histdb import histfile
由于存储在histfile中的信息非常有限,以下信息将被存储
time_finished
将从histfile解析result
(退出代码)将从histfile解析command
将从histfile解析time_start
将从time_finished
复制过来hostname
将使用当前机器的计算机名pwd
将设置为当前用户的家目录session_id
将生成并用于从histfile导入的所有命令user
将使用运行导入的当前用户
贡献
我对这个工具为我工作的方式感到满意,所以我不会再进一步扩展它,但欢迎为功能和修复提供贡献!
替代方案
依赖关系
~11–24MB
~337K SLoC