7个不稳定版本

0.4.0-beta.12024年3月3日
0.3.0 2023年6月3日
0.3.0-beta.22023年4月29日
0.3.0-beta.12023年1月19日
0.1.0 2021年6月1日

#148 in 测试

Download history 7/week @ 2024-03-31 84/week @ 2024-04-07

每月下载量127次

MIT/Apache

370KB
8K SLoC

term-transcript CLI

Build Status License: MIT OR Apache-2.0

该包为term-transcript提供命令行界面。它允许捕获终端输出为SVG并测试捕获的快照。

安装

使用以下命令安装

cargo install --locked term-transcript-cli
# This will install `term-transcript` executable, which can be checked
# as follows:
term-transcript --help

或者,您可以使用以下方式描述的应用程序Docker镜像,或从GitHub发行版下载为流行目标(Linux / macOS / Windows的x86_64和macOS的AArch64)预构建的应用程序二进制文件。

最低支持的Rust版本

该包支持最新的稳定Rust版本。它可能支持以前的稳定Rust版本,但这不是保证的。

包功能:portable-pty

在安装命令中指定 --features portable-pty 以启用伪终端(PTY)支持(请注意,在运行 term-transcript 命令时,仍需要显式打开PTY捕获)。如果没有此功能,控制台应用程序的输出将通过操作系统管道捕获,这意味着依赖于 isatty 检查或获取终端大小的程序可能产生与在真实shell中启动时不同的输出(没有着色,没有换行等)。

包功能:tracing

在安装命令中指定 --features tracing 以启用对主要执行操作的跟踪。这可能对调试很有用。跟踪使用 term_transcript::* 目标进行,主要在 DEBUG 级别。跟踪事件通过 标准订阅者 输出到 stderr;其过滤可以通过 RUST_LOG 环境变量进行配置(例如,RUST_LOG=term_transcript=debug)。

用法

  • capture 子命令捕获来自 stdin 的输出,将其渲染为 SVG,并将 SVG 输出到 stdout。
  • exec 子命令在 shell 中执行一个或多个命令,捕获它们的输出,将其渲染为 SVG 图像,并将其输出到 stdout。
  • test 子命令允许从命令行测试快照。
  • print 子命令解析 SVG 快照,并将其输出到命令行。

使用 --help 选项启动 CLI 应用程序以获取有关每个子命令参数的更多详细信息。有关一些技巧和故障排除建议,请参阅 常见问题解答

使用 Docker 镜像

作为本地安装的低成本替代方案,您可以从 GitHub 容器注册表 安装和使用 CLI 应用程序。要在一个 Docker 容器中运行应用程序,请使用类似以下命令:

docker run -i --rm --env COLOR=always \
  ghcr.io/slowli/term-transcript:master \
  print - < examples/rainbow.svg

在此,COLOR 环境变量设置了输出的着色偏好,而 - 参数用于 print 子命令,指示从 stdin 读取。

从 Docker 容器运行 exectest 子命令较为复杂,因为通常这需要将执行的命令的整个环境带到容器中。为了避免这种情况,您可以使用 Docker 镜像中预先安装的 nc 建立与主机的双向通道

docker run --rm -v /tmp/shell.sock:/tmp/shell.sock \
  ghcr.io/slowli/term-transcript:master \
  exec --shell nc --echoing --args=-U --args=/tmp/shell.sock 'ls -al'

在此,完整的 shell 命令将 nc 连接到使用 --v 选项挂载到容器的 Unix 域套接字 /tmp/shell.sock

在主机侧,将 bash shell 连接到套接字可能如下所示

mkfifo /tmp/shell.fifo
cat /tmp/shell.fifo | bash -i 2>&1 | nc -lU /tmp/shell.sock > /tmp/shell.fifo &

在此,/tmp/shell.fifo 是用于在 ncbash 之间交换数据的 FIFO 管道。这种方法的一个缺点是 shell 可执行文件不会在(伪)终端中运行,因此可能看起来不同(没有着色等)。要连接到一个伪终端中的 shell,您可以使用 socat,如下更改主机命令

socat UNIX-LISTEN:/tmp/shell.sock,fork EXEC:"bash -i",pty,setsid,ctty,stderr &

可以使用 TCP 套接字而不是 Unix 套接字,但如果可用 Unix 套接字则不推荐使用,因为它们的安全性较低。确实,应确保主机“服务器”未绑定到公开可访问的 IP 地址,否则会在主机系统上创建一个远程执行的后门。像往常一样,有注意事项适用;例如,可以在另一个 Docker 容器中启动 shell,将其与 term-transcript 容器连接到单个 Docker 网络中。在这种情况下,TCP 套接字是安全的,并且鉴于 Docker 内置的 DNS 解析机制,可能更容易使用。

示例

本例创建了一个rainbow 脚本的快照,然后对其进行了测试。

Testing rainbow example

快照本身也进行了测试!它还显示了程序输出的SVG可编辑;在快照中,这被用来突出显示命令行参数和更改用户输入中注释的颜色。

test命令还可以比较颜色

Testing color match

另一个快照是通过捕获伪终端的帮助输出创建的(--pty标志)

Output of test-transcript --help

使用PTY默认启用彩色输出,并格式化依赖于终端大小。

还可以参考用于在"父"crate term-transcript中渲染示例的shell脚本;它使用了CLI应用程序的所有主要命令和选项。该脚本生成的快照在专用文件中展示

许可证

根据您的选择,许可协议为Apache许可证第2版MIT许可证

除非您明确表示,否则您提交给term-transcript的任何有意贡献,根据Apache-2.0许可证的定义,都应按上述方式双许可,不附加任何额外的条款或条件。

依赖关系

~6–17MB
~236K SLoC