Как получить подтверждение пользователя в раковине?
Я пытаюсь собрать пользовательский ввод в текстовом файле fish, особенно в следующем виде:
This command will delete some files. Proceed (y/N)?
После некоторого поиска, я все еще не уверен, как сделать это чисто.
Это особый способ сделать это в рыбе?
Ответы
Ответ 1
Лучший способ, которым я знаю, - использовать встроенный 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
Ответ 2
Это делает то же, что и выбранный ответ, но только с одной функцией, кажется мне более чистым:
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
Функция подсказки может быть встроена как таковая.
Ответ 3
Здесь версия с необязательным приглашением по умолчанию:
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
Ответ 4
С помощью некоторых плагинов для рыбы fisherman и get
Чтобы установить оба, просто в вашей рыбной оболочке
curl -Lo ~/.config/fish/functions/fisher.fish --create-dirs https://git.io/fisher
. ~/.config/fish/config.fish
fisher get
тогда вы можете написать что-то подобное в своей рыбной функции /script
get --prompt="Are you sure [yY]?:" --rule="[yY]" | read confirm
switch $confirm
case Y y
# DELETE COMMAND GOES HERE
end