1 个不稳定版本
0.6.3 | 2021 年 5 月 30 日 |
---|
#172 在 模拟
200KB
4.5K SLoC
cmlterm
CML 设备的命令行界面。
改进 CML 内置的 SSH 命令行
- 正确处理 home/end/delete/ctrl-left/right 等键
- 将命令通过 stdin 管道输入,从 stdout 清除结果
- 通过命令行指定设备(通过实验室/设备 ID 或名称)
- 命令行补全(仅限 bash,见下文)
- 将当前终端的标题设置为当前设备的提示符
用法
使用 cmlterm --help
可以获取详细信息帮助
行号默认为 0,如果需要,请将 /<行号>
添加到设备路径的末尾。
通过 ID 打开设备
cmlterm open /abcde/n2
或者,通过名称
cmlterm open "/3-Site VPN/FW2"
身份验证
使用三个环境变量
CML_HOST
:CML 实例可访问的 IP 地址或主机名。CML_USER
:用于登录 CML 的用户名。CML_PASS64
:用户密码的 base-64 编码版本(首选,尽管不应依赖其安全性)CML_PASS
:用户密码的明文版本(不推荐使用)
命令行补全
- 目前仅支持
bash
,尽管鼓励提交 PR - 支持纯文本和单引号字符串(意思是:不会完成双引号字符串)
- 需要特殊安装步骤,请参阅下面的安装部分
安装
目前在 GitHub 上不提供预构建的二进制文件。
- 如果尚未安装 Rust,请首先安装 Rust 工具链:https://rustup.rs/
cmlterm
可以使用以下命令安装
cargo install cmlterm --git https://github.com/csm123199/cml-rs --branch main
对于 bash 自动补全,您可以在您的 shell 中执行补全包装器。您可以通过将其添加到 .profile 在任何新用户 shell 中使用它。
echo 'source <(cmlterm --completions bash)' >> .profile
基本脚本
命令可以输入(特别是,输入不是一个交互式终端),通过行分隔。每行依次发送到设备,默认情况下,每行在执行前等待下一个提示符出现,以防止命令消失。脚本在标准输入关闭并显示下一个提示符后结束。管道输入支持以下前缀来更改此行为:(使用反斜杠在它们之前使用作为字面行前缀)
- 在一行前面加上波浪号
~
在发送之前不会等待下一个提示符。这可能有助于自动化交互式命令。 - 在一行前面加上带引号的字符串(
`asd`
)将在发送行之前等待引号字符串出现(特别是在终端输出的最后256字节中)。 - (尚未实现)一个前缀可以覆盖默认的提示符超时
脚本编程
这些控制命令可以堆叠以相互交互,每个命令都按顺序放在行的开头。如果您想在行开头使用这些字符之一,请用反斜杠转义它。没有以下任何字符跟随的反斜杠将被字面发送。如果以这些控制序列开头的行解析不正确,它将被字面发送。
~
- 在发送命令之前不等待下一个提示符。(优先于超时行为)!
- 在行末不输出换行符`64:text`
- 在最后N个字节的滚动缓冲区中,等待指定的文本出现%20000%
- 将默认超时更改为指定的毫秒数,对于此命令。如果超时后没有提示符或预期文本,则仍然发送该行。
任何动态的或比这更有趣的内容可能需要包装 cmlterm
输入/输出以调整输入脚本。如果这样做,您可能想访问同一项目中(WIP)的 cmlscript
二进制文件,以获取更丰富的设备信息和更易于终端多路复用。
依赖项
~20–38MB
~618K SLoC