1 个不稳定版本
0.1.34 | 2024 年 6 月 18 日 |
---|
#2571 在 命令行实用程序
34KB
750 行
script-wizard
script-wizard
是一个 Shell 脚本辅助程序,用于将提问用户的职责、请求确认、进行选择等委托出去。规范化的响应将打印到 stdout,以便脚本消费。
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