#range #output #utf-8 #cli #unicode #cli-tool

app rout

CLI 工具,用于生成输出,类似于 echo(1) 和 printf(1)

1 个不稳定版本

0.1.0 2021 年 5 月 28 日

#2341命令行工具

Apache-2.0

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 的比较

roututfout 非常相似,但并非完全相同。以下是主要区别

  • rout 是用 rust 编写的。

  • rout使用合适的解析器(使用pestpest_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