Aqui está uma variação da função findme
que obtém os resultados, mas em vez de usar grep
para numerá-los ou less
para paginá-los, lista-os a partir de uma matriz interna e solicita o item e escolha do programa.
#!/usr/bin/env bash
readarray -O 1 -t results < <(locate -Abi '*\.'"$1" "$2" | grep --color=always -i "$2")
for((i=1; i <= ${#results[*]}; i++))
do
printf "%d: %s\n" $i "${results[i]}"
done
read -p "> " item program
$program "${results[item]}"
Eu adicionei algumas citações ao seu script original para lidar melhor com espaços em nomes de arquivos, ou mesmo com parâmetros grep. Eu ajustei a chamada readarray
para que os resultados começassem no índice 1 em vez de 0, de modo que correspondesse à numeração do grep.