How to get user confirmation in fish shell?
我正在尝试收集用户在鱼贝脚本中的输入,尤其是以下常见形式的输入:
1 | This command will delete some files. Proceed (y/N)? |
在四处寻找之后,我仍然不知道该如何干净地做这件事。
这是在鱼身上做这件事的一种特殊方式吗?
我所知道的最好的方法是使用内置的
1 2 3 4 5 6 7 8 9 10 11 12 | function read_confirm while true read -l -P 'Do you want to continue? [y/N] ' confirm switch $confirm case Y y return 0 case '' N n return 1 end end end |
在脚本/函数中这样使用:
1 2 3 | if read_confirm echo 'Do stuff' end |
有关更多选项,请参阅文档:https://fishshell.com/docs/current/commands.html阅读
这与所选答案相同,但只有一个功能,我觉得更清楚:
1 2 3 4 5 6 7 8 9 10 11 12 | function read_confirm while true read -p 'echo"Confirm? (y/n):"' -l confirm switch $confirm case Y y return 0 case '' N n return 1 end end end |
提示功能也可以这样内联。
下面是一个带有可选默认提示的版本:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 | function read_confirm --description 'Ask the user for confirmation' --argument prompt if test -z"$prompt" set prompt"Continue?" end while true read -p 'set_color green; echo -n"$prompt [y/N]:"; set_color normal' -l confirm switch $confirm case Y y return 0 case '' N n return 1 end end end |
在渔人的帮助下
两者都安装,只需在鱼壳中
1 2 3 | curl -Lo ~/.config/fish/functions/fisher.fish --create-dirs https://git.io/fisher . ~/.config/fish/config.fish fisher get |
然后可以在fish函数/脚本中编写类似的内容
1 2 3 4 5 | get --prompt="Are you sure [yY]?:" --rule="[yY]" | read confirm switch $confirm case Y y # DELETE COMMAND GOES HERE end |