这是我参与更文挑战的第2天,活动详情查看: 更文挑战
本文内容基于arthas 3.5.1 版本,介绍基础命令pwd,plaintext,wc,keymap的使用及实现。
一.pwd命令
返回当前的工作目录,和linux命令类似
文件位于com.taobao.arthas.core.command.basic1000.PwdCommand.java。
new File("").getAbsolutePath()返回当前工作目录。
二.plaintext命令
将输出的结果去除ANSI颜色
文件位于com.taobao.arthas.core.shell.command.internal.PlainTextHandler.java。
实际调用的方法是RenderUtil.ansiToPlainText。
该方法去除颜色然后输出文本,通过将\u001b[[;\d]*m替换掉来实现ANSI去除颜色。
三.wc命令
按行统计输出结果。
文件位于com.taobao.arthas.core.shell.command.internal.WordCountHandler.java。
| 参数名称 | 参数缩写 | 参数说明 | 必填项 | 示例 |
|---|---|---|---|---|
| -l | 统计输出的行数 | 必填 | jad demo.MathGame main | wc -l |
按行分割统计input.split("\n").length。
四.keymap命令
keymap命令输出当前的快捷键映射表,keymap命令仅支持在终端模式下。
默认输出内容如下:
| 快捷键 | 快捷键说明 | 命令名称 | 命令说明 |
|---|---|---|---|
| \C-a | ctrl + a | beginning-of-line | 跳到行首 |
| \C-e | ctrl + e | end-of-line | 跳到行尾 |
| \C-f | ctrl + f | forward-word | 向前移动一个单词 |
| \C-b | ctrl + b | backward-word | 向后移动一个单词 |
| \e[D | 键盘左方向键 | backward-char | 光标向前移动一个字符 |
| \e[C | 键盘右方向键 | forward-char | 光标向后移动一个字符 |
| \e[A | 键盘上方向键 | history-search-backward | 上翻显示上一个命令 |
| \e[B | 键盘下方向键 | history-search-forward | 下翻显示下一个命令 |
| \C-h | ctrl + h | backward-delete-char | 向后删除一个字符 |
| \C-? | ctrl + shift + / | backward-delete-char | 向后删除一个字符 |
| \C-u | ctrl + u | undo | 撤销上一个命令,相当于清空当前行 |
| \C-d | ctrl + d | delete-char | 删除当前光标所在字符 |
| \C-k | ctrl + k | kill-line | 删除当前光标到行尾的所有字符 |
| \C-i | ctrl + i | complete | 自动补全,相当于敲TAB |
| \C-j | ctrl + j | accept-line | 结束当前行,相当于敲回车 |
| \C-m | ctrl + m | accept-line | 结束当前行,相当于敲回车 |
文件位于com.taobao.arthas.core.command.basic1000.KeymapCommand.java。
Helper.loadInputRcFile()方法获取快捷键
1.加载目录$USER_HOME/.arthas/conf/inputrc为用户自定义快捷键文件
2.获取默认文件ShellServerOptions.DEFAULT_INPUTRC即路径为com/taobao/arthas/core/shell/term/readline/inputrc
的文件。
3.若未找到则使用com.alibaba.middleware:termd-corejar包中的快捷键文件,否则报错无法加载该文件。\
读取完成后,如果是#开头的说明是注释,忽略,符合条件的行按冒号分割出快捷键及命令名称。
RenderUtil.render方法生成表格形式的字符串内容。