Primeiro, coloque as opções em uma matriz. Sintaxe de Bash:
IFS=$'\n' read -r -d '' -a choices < <(locate filename)
Sintaxe do Zsh:
choices=("${(@f)$(locate filename)}")
A maneira de baixa tecnologia, mas não muito amigável para permitir que o usuário selecione um dos itens, é usar o select
construct .
select choice in "${choices[@]}"; do
xdg-open "$choice"
break
done
(sintaxe Bash; isso também funciona em zsh, mas pode ser simplificado.)
Para uma interface mais agradável, você pode usar o diálogo .
menu_args=()
for c in "${choices[@]}"; do
menu_args+=("$c" "$c")
done
if choice=$(dialog --menu "$title" "$LINES" "$COLUMNS" "$LINES" "${menu_args[@]}"); then
xdg-open "$choice"
fi