A função Bash a seguir usará a saída obtida após a execução do comando (por exemplo, grep -ilr mysql_connect *
) para criar uma lista da qual você pode selecionar uma opção, um arquivo. Após a seleção ser feita, o arquivo será aberto usando o Vim.
output_selection()
{
local i=-1;
local opts=()
local s=
while read -r line; do
opts+=("$line")
printf "[$((++i))] %s\n" "$line"
done < <("$@")
read -p '#?' s
if [[ $s = *[!0-9]* ]]; then
printf '%s\n' "'$s' is not numeric." >&2
elif (( s < 0 )) || (( s >= ${#opts[@]} )); then
printf '%s\n' "'$s' is out of bounds." >&2
else
vim "${opts[$s]}"
fi
}
Pré-condições: A saída deve ser '\ n' delimitada.
Uso: output_selection [comando]
Exemplo:
output_selection grep '.php$' foo.txt
Isso não é exatamente o que você pediu, então você pode ver isso como uma sugestão legítima para executar a mesma tarefa de uma maneira que seja, IMO, mais conveniente - especialmente quando a saída é grande.