1 个不稳定版本
0.1.0 | 2021 年 5 月 28 日 |
---|
#2341 在 命令行工具
97KB
2.5K SLoC
路由
路由 释义 - 呼啸;咆哮。
概述
那么它是什么?
rout
是一个简单的命令行工具,用于生成输出。正如你可能从其名称中猜到的,它是用 rust 编写的。
那么它是什么?
rout
做了像 echo(1)
和 printf(1)
这样的工具所做的一切,但 rout
还允许你做一些有趣的事情,例如
- 在不使用 shell 重定向运算符的情况下重定向输出(你甚至可以将输出到任意文件描述符或终端)。
- 重复命令的范围。
- 暂停特定的时间。
那么它是什么?
这是一个可以用来生成字节流的工具。
那么它是什么?
这是一个显示东西的东西!
哦,为什么不早点说呢?!
这个对话框非常松散地基于并受到电视剧《红矮星》中“Cat”在“Stasis Leak”一集中发起的三方会谈的启发(系列/季 2,集 4)。如果你从未看过这部剧,那就把它定为你的终身使命吧!
安装
$ cargo install rout
示例
# Print "foofoofoo" to stdout, followed by "barbar" to stderr.
$ rout "foo" -r 2 -e "bar" -r 1
# Write 50 nul bytes direct to the terminal.
$ rout -t "\0" -r 49
# Write continuous stream of nul bytes direct to the terminal,
# 1 per second.
$ rout -b 1s -t '\0' -r -1
# Display a greeting slowly (as a human might type)
$ rout -b 20cs "Hello, $USER.\n"
# Display a "spinner" that loops 4 times.
$ rout -b 20cs "\r|\r/\r-\r\\\\" -r 3
# Display all digits between zero and nine with a trailing
# newline.
$ rout "\{0..9}\n"
# Display slowly the lower-case letters of the alphabet,
# backwards without a newline.
$ rout -b 1ds "\{z..a}"
# Display upper-case 'ABC' with newline.
$ rout '\u0041\u0042\u0043\n'
# Display 'foo' with newline.
$ rout '\o146\u006f\x6F\n'
# Clear the screen.
$ rout '\n' -r $LINES
# Write hello to stdout, stderr and the terminal.
$ rout 'hello' -t -r 1 -e -r 1
# Display upper-case letters of the alphabet using octal
# notation, plus a newline.
$ rout "\{\o101..\o132}"
# Display 'h.e.l.l.o.' followed by a newline.
$ rout -a . "hello" -a '' "\n"
# Display "S.O.S. Please!"
$ rout -a . "SOS" -a '' " Please\!\n"
# Display upper-case and lower-case letters of the alphabet
# including the characters in-between, with a trailing newline.
$ rout "\{A..z}\n"
# Display lower-case alphabet followed by reversed lower-case alphabet
# with the digits zero to nine, then nine to zero on the next line.
$ rout "\{a..z}\{z..a}\n\{0..9}\{9..0}\n"
# Display lower-case Greek letters of the alphabet.
$ rout "\{α..ω}"
# Display Cyrillic characters.
$ rout "\{Ѐ..ӿ}"
# Display all printable ASCII characters using hex range:
$ rout "\{x21..x7e}"
# Display all printable ASCII characters using 2-byte UTF-8 range:
$ rout "\{u0021..u007e}"
# Display the entire 2-byte range of UTF-8 characters using aliases:
$ rout "\{umin..umax}"
# Display all printable ASCII characters using 4-byte UTF-8 range:
$ rout "\{U00000021..U0000007e}"
# As above, but use more memorable aliases (and less typing ;)
$ rout "\{Umin..Umax}"
# Display all braille characters.
$ rout "\{u2800..u28FF}"
# Display 'WARNING' in white on red background.
$ rout '\e[37;41mWARNING\e[0m\n'
# Generate 10 random characters.
$ rout '\g' -r 9
历史
这是一个对原始 C 实现的 rust 版本,utfout
。
常见问题解答
-
我的 shell 不能做到大部分这些事情吗?
是的,在某些情况下可以。然而,
rout
通常做得更简洁。然而,你可能想知道为什么你的 shell 提供了这些额外的功能(UNIX 哲学建议可能不应该这样做(想想“只做一件事情,做好它” + “渐进式特性主义”)。
附录
与 utfout 的比较
rout
与 utfout
非常相似,但并非完全相同。以下是主要区别
-
rout
是用 rust 编写的。 -
rout
使用合适的解析器(使用pest
和pest_consume
)来处理字符串参数中可以指定的嵌入转义字符、命令和范围。 -
rout
有一套完整的单元测试。 -
命令行处理
尽管
utfout
提供了短选项名和长选项名,但rout
只提供短选项名。原因是rout
使用了我编写的简单命令行解析器,因为没有合适的现有命令行解析器。更多详情请参阅这篇博客文章。 -
rout
不提供-p
标志来允许更改转义字符前缀。尽管对于
utfout
来说很简单,但rout
没有提供这项功能,因为它使用了一个合适的解析器,该解析器需要知道前缀字符。 -
utfout """"
将显示一个空字节,而rout
中这将被视为无操作(无输出)。要在rout
中显示空字节,请明确指定:rout ""\0""
。 -
rout
通过不需要在范围括号内的每个值前使用反斜杠来稍微简化了utfout
的范围。范围 rout
utfout
hex "\{x21..x7e}"
"\{\x21..\x7e}"
utf8 "\{U00000021..U0000007e}"
"\{\U00000021..\U0000007e}"
依赖项
~5MB
~106K SLoC