rlwrap 工具详解:为命令行程序添加 readline 编辑功能
什么是 rlwrap
rlwrap 是一个实用的命令行工具,它能够为那些本身不支持 readline 功能的命令行程序添加行编辑、历史记录和自动补全等功能。通过 rlwrap 包装后的命令,用户可以获得类似 bash 的高级编辑体验,包括使用方向键导航、历史记录搜索等特性。
基本使用方法
rlwrap 的基本使用语法非常简单:
rlwrap [选项] 命令 [命令参数...]
例如,为 nc
命令添加 readline 功能:
rlwrap nc
核心功能特性
1. 行编辑功能
- 支持使用方向键在行内移动光标
- 提供基本的文本编辑能力(删除、插入等)
- 支持常用的 readline 快捷键
2. 历史记录
- 自动保存输入历史
- 支持历史记录搜索(通常通过 Ctrl+R)
- 可配置历史记录大小和去重策略
3. 自动补全
- 支持基本的单词补全
- 可配置文件名补全
- 支持从文件加载补全词列表
常用选项详解
基本控制选项
-a
,--always-readline
:强制使用 readline 模式,适用于那些已经有自己行编辑器的程序-N
,--no-children
:不对子进程(如分页器)使用 readline,提高可用性-n
,--no-warnings
:不显示警告信息
历史记录相关
-H
,--history-filename
:指定历史记录文件路径-s
,--histsize
:设置历史记录最大条目数(默认300)-D
,--history-no-dupes
:控制历史记录去重策略:- 0:保留所有输入
- 1:删除连续重复(默认)
- 2:删除会话中所有重复
自动补全相关
-f
,--file
:从指定文件加载补全词列表-c
,--complete-filenames
:启用文件名补全-i
,--case-insensitive
:启用不区分大小写的补全-b
,--break-chars
:设置单词分隔字符
提示符处理
-p
,--prompt-colour
:设置提示符颜色-S
,--substitute-prompt
:替换命令的原始提示符-A
,--ansi-colour-aware
:更好地处理包含ANSI颜色代码的提示符
多行输入支持
-m
,--multi-line
:启用多行输入支持-M
,--multi-line-ext
:为多行编辑器指定临时文件扩展名
高级功能
过滤器系统
rlwrap 提供了强大的过滤器系统,允许用户修改程序的行为:
rlwrap -z 过滤器 命令
过滤器可以用于:
- 修改提示符
- 实现简单的宏
- 创建可编程的热键
- 实现更复杂的补全逻辑
例如,使用过滤器高亮错误信息:
rlwrap -z 'makefilter egrep -i --color "error|$"' command
工作模式解析
rlwrap 有两种主要工作模式:
- 直接模式:当检测到命令处于原始模式时,直接传递所有输入
- Readline模式:当检测到命令处于熟模式时,使用 readline 处理输入
模式切换是自动进行的,但可以通过 -a
选项强制使用 readline 模式。
实用示例
- 包装 smbclient,避免保存密码到历史记录:
rlwrap -aPassword: -N smbclient //SERVER/SHARE
- 包装 SQLite3,启用不区分大小写的SQL关键字补全:
rlwrap -a -z pipeto -i -f sql_words sqlite3 database.db
- 在脚本中使用 rlwrap 作为增强版 read:
order=$(rlwrap -pYellow -S 'Your pizza? ' -H past_orders -P Margherita -o cat)
注意事项
- 对于已经有自己行编辑器的程序(如 python、lua 等),需要使用
-a
选项才能生效 - 某些程序可能会因为 rlwrap 的终端设置而表现异常,可以尝试
-t dumb
选项 - 在多行编辑模式下,默认使用
\
作为换行符,可通过-m
选项修改
rlwrap 是一个强大而灵活的工具,能够显著提升许多命令行程序的交互体验。通过合理配置其丰富的选项,用户可以为几乎任何命令行程序添加现代化的编辑功能。
创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考