我试图在fish shell脚本中收集用户输入,特别是以下常见的形式:
This command will delete some files. Proceed (y/N)?
经过一番搜索,我仍然不确定如何干净地做到这一点。
这是鱼的一种特殊方式吗?
我知道的最好的方法是使用内置的read
。如果你在多个地方使用它,你可以创建这个辅助函数:
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
并在脚本/函数中这样使用:
if read_confirm
echo 'Do stuff'
end
更多选项见文档:https://fishshell.com/docs/current/commands.html阅读
这与选择的答案相同,但只有一个函数,对我来说似乎更干净:
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
提示函数可以这样内联
这个版本有一个可选的,默认的提示符:
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
在一些钓鱼插件的帮助下,渔夫和get
要安装这两个,只需在你的鱼壳
curl -Lo ~/.config/fish/functions/fisher.fish --create-dirs https://git.io/fisher
. ~/.config/fish/config.fish
fisher get
那么你可以在fish函数/script
中这样写get --prompt="Are you sure [yY]?:" --rule="[yY]" | read confirm
switch $confirm
case Y y
# DELETE COMMAND GOES HERE
end