不排除
result=$(inner.sh)
刚刚好。如果要在脚本中显示交互式提示或对话框,请在stderr上执行这些操作,并让它只编写stdout的答案。然后你就可以吃蛋糕了:互动提示
和
结果保存到变量中。
例如,
dialog
如果你使用
--output-fd 1
告诉它把答案写给标准输出。它使用咒语将对话框绘制到备用屏幕,但都是在stderr上完成的。
$ value=$(dialog --keep-tite --output-fd 1 --inputbox title 10 40)
<dialog box shown>
<type "hello">
hello
(通过
Ask Ubuntu: How to get dialog box input directed to a variable?
)
你发布的脚本也可以做同样的事情。它当前正在写入stdout。放
exec 3>&1 1>&2
在顶部,所以它将改为写入stderr,并更改最终
echo ${options[$selected]}
到
echo ${options[$selected]} >&3
给标准答案。这样就不需要调用者篡改文件描述符。
也就是说,提示不是很unix-y。考虑完全避免交互,而使用命令行参数、配置文件或环境变量。这些选项对于那些知道如何使用脚本并希望自己实现脚本自动化的高级用户来说更好。
我在这里的主要目的是
latest-stable-config
从我最后一次备份的选择中,我认为这需要人工判断何时将备份视为适当的稳定。
我个人处理这件事的方法是用几种模式写一个脚本。我们称之为
backups
.
backups --list
将显示备份列表。你挑一个然后打电话
backups --commit <id>
它将提交指定的配置。
备份
如果没有参数,则会为不熟悉的用户显示用法。
$ backups
Usage: backups --list
or: backups --commit <id>
Manages a selection of backups. Use --list to list available backups
and --commit to commit the latest stable config.
$ backups --list
4ac6 10 minutes ago
18f2 1 day ago
3019 7 days ago
$ backups --commit 4ac6