1 个不稳定版本
0.1.0 | 2021年1月4日 |
---|
#64 in #unix-socket
18KB
371 行
abra
一个使终端窗口之间数据共享变得简单的工具。
abra 可用于显示当前工作目录的信息,分割 stdout 和 stderr 等。
目录
安装
安装 abra 的推荐方法是运行
brew install denisidoro/tools/abra
您还可以运行
cargo install abra-cli
如果这些包管理器不可用,您可以从此处下载预编译的二进制文件并将其解压到您的 $PATH
中。
基本概念
- abra 基于Unix套接字构建
- 它可以发布和订阅频道,并根据需要操作文本
- 无需终端复用器
常见用法
一些 abra 调用相当详细,因此建议使用 别名。
文件树侧边栏
由于这是一个非常常见的用例,abra 提供了一个钩子供您使用。
如果您调用以下...
eval "$(abra hook bash)" # If you use bash, add this to ~/.bashrc
eval "$(abra hook zsh)" # If you use zsh, add this to ~/.zshrc
然后您可以在新终端窗口中调用 abra rx --channel pwd --cmd 'ls {}'
。
每次您 cd
进入目录时,侧边栏都会反映这些更改。
在不同窗口中分割 stdout 和 stderr
假设您想运行一些测试,但错误应该出现在不同的窗口中。
您可以使用 abra 中的匿名管道来实现此目的
命令是
abra rx --channel test_out # window 1
abra rx --channel test_err # window 2
cargo test > >(abra tx --channel test_out) 2> >(abra tx --channel test_err) # window 3
过滤一些输出行
假设您想在窗口中查看文件内容,但在另一个窗口中只显示包含 "foo" 的行
abra rx --channel filter --cmd 'echo "{}" | grep foo' # window 1
cat myfile.txt |& tee >(abra tx --channel filter) # window 2
强制彩色输出
一些 CLI 会检测到它们正在被管道传输,并默认隐藏颜色信息。
为了避免这个问题,每个命令行界面可能提供不同的参数:例如 --color=always
和 export COLORTERM=truecolor
。
在某些情况下,您可能需要欺骗一个应用程序,使其认为其标准输出是一个终端,而不是管道。对于这些情况,您可以调用 abra faketty --cmd '<your command>'
。
与命名管道相比的优势
从理论上讲,您可以通过以下方式实现类似的结果
mkfifo tmp
tail -f tmp
echo foo > tmp # in another window
话虽如此
- 使用 abra,您不需要担心创建/删除命名管道
echo foo > tmp
在tmp
未打开读取时是阻塞的abra tx
如果没有abra rx
进程,将立即终止
- 您可以拥有多个响应相同
abra tx
调用的abra rx
窗口 - abra 是跨平台的
- 要正确创建临时命名管道,您需要编写特定于平台的代码
类似工具
词源
依赖项
~4–13MB
~131K SLoC