#bash #shell #cli #argument #arguments-parser #parser #unix-socket

bin+lib kadabra

轻松在不同终端窗口之间共享数据

1 个不稳定版本

0.1.0 2021年1月4日

#64 in #unix-socket

Apache-2.0

18KB
371

abra Actions Status GitHub release

一个使终端窗口之间数据共享变得简单的工具。

abra 可用于显示当前工作目录的信息,分割 stdout 和 stderr 等。

File tree demo

目录

安装

安装 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 中的匿名管道来实现此目的

Split demo

命令是

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=alwaysexport COLORTERM=truecolor

在某些情况下,您可能需要欺骗一个应用程序,使其认为其标准输出是一个终端,而不是管道。对于这些情况,您可以调用 abra faketty --cmd '<your command>'

与命名管道相比的优势

从理论上讲,您可以通过以下方式实现类似的结果

mkfifo tmp
tail -f tmp
echo foo > tmp # in another window

话虽如此

  • 使用 abra,您不需要担心创建/删除命名管道
  • echo foo > tmptmp 未打开读取时是阻塞的
    • abra tx 如果没有 abra rx 进程,将立即终止
  • 您可以拥有多个响应相同 abra tx 调用的 abra rx 窗口
  • abra 是跨平台的
    • 要正确创建临时命名管道,您需要编写特定于平台的代码

类似工具

词源

Abra 是一种能够 宝可梦,能够 传送

依赖项

~4–13MB
~131K SLoC