#shell #bash #delegates #selection

程序+库 script-wizard

script-wizard 是一个 Shell 脚本(Bash)辅助程序,用于将提问用户的职责、请求确认、进行选择等委托出去。规范化的响应将打印到 stdout,以便脚本消费。

1 个不稳定版本

0.1.34 2024 年 6 月 18 日

#2571命令行实用程序

MIT 许可证

34KB
750

script-wizard

script-wizard 是一个 Shell 脚本辅助程序,用于将提问用户的职责、请求确认、进行选择等委托出去。规范化的响应将打印到 stdout,以便脚本消费。

请参阅 docs.rs 上的文档页面


lib.rs:

script-wizard 是一个 Shell 脚本(Bash)辅助程序,用于将提问用户的职责、请求确认、进行选择等委托出去。规范化的响应将打印到 stdout,以便脚本消费。

这是一个用 Rust 编写的单个二进制应用程序,它使用 inquire 库提供比典型 Shell 脚本更好的用户界面。

源代码

源代码托管在 GitHub EnigmaCurry/script-wizard

使用 cargo 安装

cargo install script_wizard

不使用 cargo 安装

从 GitHub 获取最新版本 或运行此命令自动下载和安装

cd ~/Downloads
ARCHIVE=script-wizard-$(uname -s)-$(uname -m).tar.gz
curl -LO https://github.com/Enigmacurry/script-wizard/releases/latest/download/${ARCHIVE}
tar xfv ${ARCHIVE}
sudo install script-wizard /usr/local/bin/script-wizard

Bash 中的示例

ask

向用户提问并捕获响应

# Set the alias to make it easier to use:
alias ask='script-wizard ask'

# Record the user's response into the NAME variable:
NAME=$(ask "What is your name?")

confirm

向用户提问一个 yes/no 问题,带有预定义的默认响应(例如,这里的默认响应是 yes

# Set the alias to make it easier to use:
alias confirm='script-wizard confirm'

# Confirm returns an exit code: 0=yes 1=no :
if confirm "Do you like Linux?" yes; then
  echo "Tux is great!"
else
  echo "Well, thats ok."
fi

# But maybe you want to record a literal "true" or "false" into a variable?:
LIKES_LINUX=$(confirm "Do you like Linux?" yes && echo "true" || echo "false")

choose

向用户展示一个选项列表,并让他们从列表中选择一个 单个 响应

# Set the alias to make it easier to use:
alias choose='script-wizard choose'

CHOSEN=$(choose "Select your character class" "Rogue" "Wizard" "Paladin" "Cleric" "Bard")
# You can use an option from a bash array too:
options=("red" "blue" "greenish orange" "purple")
COLOR=$(choose "Choose a color" "${options[@]}")

select

向用户展示一个选项列表,并让他们从列表中选择 多个 响应(零个或多个)

readarray -t SELECTED < <(script-wizard select "Which games do you like?" "Rocket League" "Portal" "Quake" "Magic the Gathering")

echo "These are the games you said you like:"
# Use printf to print one per line (echo would merge into one line):
printf '%s\n' "${SELECTED[@]}"

date

向用户展示日期选择器

# Pick a date between 2023/10/01 and 2023/10/20:
DATE=$(script-wizard date "Enter a date" --week-start monday --format "%Y-%m-%d" --min-date "2023-10-01" --max-date "2023-10-20" --help-message "yadda yadda")

editor

向用户展示一个完整的文本编辑器输入

BIOGRAPHY=$(script-wizard editor "Tell me alllll about yourself" --default "# Describe yourself" --json | sed 's/^[^\"]*//')

注意:如果您的编辑器向 stdout 打印任何内容,这里可能存在潜在的错误。(在 emacsclient 的情况下,它不希望捕获文本 "Waiting for Emacs..."。)使用 --json 将将正确的编辑器文本用双引号括起来,并通过 sed 's/^[^\"]*//' 移除第一个双引号之前的文本。)

设置公共 EDITOR 环境变量以选择它启动的编辑器。

menu

显示用户可以选择并执行的命令菜单。条目必须按照以下格式指定:ENTRY = COMMAND 其中 ENTRY 是菜单条目的文本行,而 COMMAND 是如果选择条目将运行的shell命令

script-wizard menu --once "main menu" "print username = whoami"  "print all users = cat /etc/passwd | cut -d ':' -f 1"

常见选项

  • --json - 默认情况下,即使内容跨越多行也会打印原始文本。如果您指定 --json,它将作为紧凑的JSON打印到单行上,根据子命令,将行分割成字符串列表或作为引号字符串,如果它只应该是一行。

依赖关系

~7–17MB
~230K SLoC