7个不稳定版本
0.4.0-beta.1 | 2024年3月3日 |
---|---|
0.3.0 | 2023年6月3日 |
0.3.0-beta.2 | 2023年4月29日 |
0.3.0-beta.1 | 2023年1月19日 |
0.1.0 | 2021年6月1日 |
#148 in 测试
每月下载量127次
370KB
8K SLoC
term-transcript CLI
该包为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 容器运行 exec
和 test
子命令较为复杂,因为通常这需要将执行的命令的整个环境带到容器中。为了避免这种情况,您可以使用 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
是用于在 nc
和 bash
之间交换数据的 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 脚本的快照,然后对其进行了测试。
快照本身也进行了测试!它还显示了程序输出的SVG可编辑;在快照中,这被用来突出显示命令行参数和更改用户输入中注释的颜色。
test
命令还可以比较颜色
另一个快照是通过捕获伪终端的帮助输出创建的(--pty
标志)
使用PTY默认启用彩色输出,并格式化依赖于终端大小。
还可以参考用于在"父"crate term-transcript
中渲染示例的shell脚本;它使用了CLI应用程序的所有主要命令和选项。该脚本生成的快照在专用文件中展示。
许可证
根据您的选择,许可协议为Apache许可证第2版或MIT许可证。
除非您明确表示,否则您提交给term-transcript
的任何有意贡献,根据Apache-2.0许可证的定义,都应按上述方式双许可,不附加任何额外的条款或条件。
依赖关系
~6–17MB
~236K SLoC