3个版本
0.1.2 | 2023年5月28日 |
---|---|
0.1.1 | 2023年5月28日 |
0.1.0 | 2021年5月30日 |
#9 in #compliance
每月 31次下载
515KB
1.5K SLoC
vrsh
一个用Rust编写的简单shell,作为我学习Rust的方式
长期目标/梦想(可能不会实现),达到POSIX合规性 (https://pubs.opengroup.org/onlinepubs/009604499/utilities/xcu_chap02.html)。
可定制提示
要自定义提示,可以设置 PROMPT
变量。这可以通过使用 set var=val
语法来完成,其中 val
是一个字符串,请注意,如果使用单引号 ('
) 包裹字符串,则字符串内容将被保留,并且将在提示上执行提示扩展,请参阅 提示扩展。如果使用双引号 ("
) 包裹字符串,则将在字符串上执行标准扩展(注意,这些是在立即评估的,而单引号语法是在每次提示显示时评估的)。
要使提示配置永久化,可以在 ~/.vrshrc
文件中设置 PROMPT
变量(如果不存在,则在应用程序启动时生成)。
提示扩展
目前支持以下提示扩展
%%
用于%
字符。%n
当前用户的用户名。%F{var}
用于设置后续文本的前景色,var 必须是受支持的颜色之一(请参阅 提示扩展颜色);或者是一个范围在0-255之间的数字,请参阅 ansi 8位着色。%f
重置前景色。%K{var}
与%F
工作相同,但用于背景色。%k
重置背景色。%g
根据内置的 git 模块(如下例中所示)打印 git 信息。%d
或%/
完整地打印当前工作目录。%~
打印当前工作目录,但将/home/current_user
替换为~/
。%~>
只打印带有前导/
的当前目录(例如,如果当前路径是/var/log
,则将打印/log
)。如果当前工作目录是/home/current_user
,则将打印~/
。%-<
打印当前目录的父目录(例如,如果在/var/log
中,则将打印/var
)。如果当前目录是根目录 (/
),则不会打印任何内容。
提示符颜色扩展
要测试当前终端中的颜色,可以使用 vrsh-colors
命令,该命令将打印所有 256 种支持的亮色和暗色。以下是命名颜色及其数值:
红色
= 1绿色
= 2橙色
= 3蓝色
= 4紫色
= 5蓝绿色
= 6白色
= 7灰色
= 8深红色
= 9亮绿色
= 34亮蓝色
= 123粉色
= 200黄色
= 220
示例
我目前使用的提示符示例如下,虽然它有点冗长。
set PROMPT='%F{blue} %~%f %F{orange} as %f %F{purple}%n%f %g %F{brightgreen} ❯ %f'
PROMPT 提供以下提示符:
可以使用 %~<
和 %~>
选项来打印完整路径,但仅突出显示当前目录,例如
set PROMPT='%F{31}%~<%f%F{51}%~>%f%F{214} as%f%F{170}%n%f%g%F{46} ❯%f'
提供以下提示符
来自 vrsh-colors
命令的示例输出
当前和计划中的功能
目前只实现了一小部分功能,但计划增加更多功能,请随时提出要添加到计划功能列表中的功能建议!
当前和计划中的功能列表
- 执行具有给定参数的程序。
- 支持单引号
'
- 没有空格的参数应视为一个参数,例如
"asd""bsd"
应被视为一个参数。 - 支持环境变量,例如:
$HOME
- 支持注释
#
- 命令历史
- 持久化(存储在用户主目录中的历史文件中)。
- 可以通过使用
上箭头
回到历史和下箭头
前进历史来重复使用命令。
- 一些基本的语法高亮
- 建议之前使用的命令。
- 高亮(有效)命令。
- 高亮字符串。
- 匹配扩展
- 扩展(更多信息请查看https://gnu.ac.cn/software/bash/manual/html_node/Shell-Expansions.html)
- 使用
$()
的命令扩展。 - - -> 匹配任何文件。
- 更多...请参阅上述链接
- 使用
- 程序之间的管道
|
。 - 重定向
- 从命令输出到文件(
>
)。 - 从文件到程序(
<
)。
- 从命令输出到文件(
- 内置命令
-
cd
-
exit
-
alias
-
~
-> 当前用户的主目录。
-
-
source
- 变量,例如:
A="some value"
- 特定于程序的变量,例如:
SOME_VARIABLE="some_value" firefox
- 特定于程序的变量,例如:
-
- 自动完成
- 对于历史,请参阅上方。
- 使用
tab
完成文件。 - 当有多个选项时,通过按 tab 完成扩展文件。
- 历史中的命令的 tab 完成功能。
- 提示符
- 显示当前路径。
- Git 集成。
- 显示当前用户。
- 显示最后一条命令的结果。
- 右侧也有提示符。
- 支持 starship 集成: https://starship.rs/。
- 使用文件进行配置。
- 能够添加别名。
- 配置颜色方案。
- 自定义提示符
- 后台进程
&
- 顺序执行的命令
&&
依赖项
~19MB
~411K SLoC