如何在shell中获得用户确认?

How to get user confirmation in fish shell?

我正在尝试收集用户在鱼贝脚本中的输入,尤其是以下常见形式的输入:

1
This command will delete some files. Proceed (y/N)?

在四处寻找之后,我仍然不知道该如何干净地做这件事。

这是在鱼身上做这件事的一种特殊方式吗?


我所知道的最好的方法是使用内置的read。如果在多个地方使用此功能,则可以创建此帮助器函数:

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