我正试图在fish shell脚本中收集用户输入,特别是以下常见形式:
This command will delete some files. Proceed (y/N)?
在搜索了一番后,我仍然不确定如何干净地做到这一点。
在fish shell中是否有特殊的方法来做到这一点?
我正试图在fish shell脚本中收集用户输入,特别是以下常见形式:
This command will delete some files. Proceed (y/N)?
在搜索了一番后,我仍然不确定如何干净地做到这一点。
在fish shell中是否有特殊的方法来做到这一点?
我知道的最好方法是使用内置的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#read
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
要安装两个插件,只需在您的鱼壳中输入命令即可。
curl -Lo ~/.config/fish/functions/fisher.fish --create-dirs https://git.io/fisher
. ~/.config/fish/config.fish
fisher get
get --prompt="Are you sure [yY]?:" --rule="[yY]" | read confirm
switch $confirm
case Y y
# DELETE COMMAND GOES HERE
end
-p
参数可以是任何 shell 命令,并且会按照空格进行分词,例如echo "Delete Files? [Y/n]: "'
。根据您提供的文档,-p PROMPT_CMD
或--prompt=PROMPT_CMD
会使用 shell 命令PROMPT_CMD
的输出作为交互模式的提示符。默认提示命令为set_color green; echo read; set_color normal; echo "> "
。 - Ionoclast Brighamread -P "prompt: " ...
或者read --prompt-str="prompt: " ...
,可以将字符串传递给read
命令,而不是一个函数。 - Brett Y