Eu tenho vários arquivos em um diretório e estou trabalhando em um script bash para listar todos os arquivos junto com um índice próximo a eles para que os usuários possam escolher qual arquivo selecionar com base no índice em vez de escrever o arquivo inteiro nome.
Por ex.
main_dir
- temp_1
- temp_2
minha tentativa:
while [[ 1 ]]; do
printf "Which file do you want to use? ($(ls -m ${main_dir})) "
read -r ans
if [[ -d ${main_dir}/${ans} ]]; then
break
else
echo "[ERROR] Failed to choose. Please choose from ($(ls -m "${main_dir}"))."
fi
done
Neste caso, a saída é:
Which file do you want to use? (temp_1, temp_2)
Além disso, o usuário deve digitar o nome do arquivo para selecioná-lo.
RESULTADO ESPERADO:
Which file do you want to use?
1. temp_1
2. temp_2
E, o usuário deve ser capaz de escolher um arquivo de ambas as maneiras, inserindo o nome ou o índice.
faça um loop * e lembre-se dos arquivos em uma matriz:
Expandindo o comentário de @Cyrus sobre a utilidade da
select
diretiva do bash ....Se não fosse pela sua estipulação de poder selecionar por número ou nome, o bash
select
pode ser tudo o que você precisa:Embora a interface possa ser um pouco espartana para algumas necessidades, quando você precisa de algo rápido e sujo, mas ainda assim confiável,
select
é uma ferramenta útil para se ter na bolsa.A
man
página do bash cita alguns aspectos doselect
comportamento do 's que podemos utilizar:Portanto, colocando algum código de suporte em torno da chamada para
select
, isso é possível:Resultado: