如何在鱼壳中获得用户确认



我试图在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

相关内容

  • 没有找到相关文章

最新更新