4 个版本

0.1.3 2021 年 10 月 2 日
0.1.2 2021 年 6 月 16 日
0.1.1 2021 年 1 月 16 日
0.1.0 2021 年 1 月 16 日

#408 in 操作系统

MIT 许可证

89KB
2.5K SLoC

RuShell

基于 bogobble 解析器系统构建的 Rust Shell。

它有一些其他 Shell 没有的功能

  • 在输入时进行语法和错误高亮。
  • 多行编辑
  • 原始字符串输入
  • 如果未找到变量,则使用默认值

还有很多事情要做,但很多东西都可以正常工作

使用 "cargo install ru_shell" 进行安装

为了设置环境,您需要创建一个名为 "$HOME/.config/rushell/init.rush" 的文件

在文件中放入类似的内容

一个看起来正常的 Shell 提示符

let RU_PROMPT=r#"${USERNAME,rushell} \e33m$PWD\n>>\e0m"#

这里

  • r#".."# 读取一个原始字符串,其内容在输入时不会被处理。这允许它在每次需要显示提示符时进行处理。
  • \\e 等同于 Esc[,用于表示转义码。
  • 33m / 34m 设置颜色
  • 0m 将颜色重置为默认值。
  • ${varname, default} 如果变量为空,将使用默认值
  • $PWD 直接引用变量,但如果该变量不存在,则会显示错误。
  • $(command args) 执行命令,并将输出视为单个字符串参数。

我通常使用的提示符

let RU_PROMPT= r#"\e1m\e34m${USERNAME,Matt}: :\e32m$(basename $PWD)\n\e34m>>\e0m"#

如果您已安装 starship,可以使用它这样

let RU_PROMPT = r"$(starship prompt)"

RuShell 明确使用的其他环境变量是 "PWD"、"PATH"、"RU_HIGHLIGHT"、"RU_COMPLETE",然而后两个尚未完全确定。

"init.rush" 文件将在每次 Shell 启动时运行,并相当于在会话开始时在文件中输入了所有内容。

用法

一般来说,使用Ru Shell的感觉应该和任何其他shell相似,但有几点值得注意的例外。

块由花括号包围

for x in * {
echo $x
}

if true {
echo Its True
} else {
echo Its False
}

有一个用于取消归属的保留字

disown syncthing --no-browser

赋值器:Export、Let、Set、Push

有四种方式写入变量,它们看起来都一样

let x = a
set x = b
push x = :c
export x = d
echo $x
# prints b:c 

下面是它们的作用

  • "let" 在当前作用域中创建一个具有适当值的变量
  • "set" 在可以的最小作用域中搜索具有给定名称的变量,并用值替换它。如果没有找到,则会在当前作用域中创建一个。
  • "push" 搜索变量,并将新值推送到末尾。
  • "export" 写入环境变量"

在读取变量时,首先检查当前作用域,然后向外扩展,直到最后的环境变量。

所有赋值器都可以一次分配多个变量。

let x y = a [4 5 6]

for m in $y {
    echo $x -- $m
}

打印

a -- 4
a -- 5
a -- 6

变更日志

v0.1.3

  • 现在允许使用"#"结束行,使用"##"继续行
  • 修复了"\\n"不会在输出中插入新行的问题
  • tab补全对于选择程序(使用"./"和"/")有效(待办事项:限制为可执行文件)

依赖项

~4–13MB
~144K SLoC