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 在 操作系统
72KB
2K SLoC
histdb-rs
为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-dir
和import-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-dir
和import-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