2013-04-04 17 views
13

Próbuję użyć plików w katalogu jako opcji w skrypcie basha. Użytkownik powinien móc wybrać jeden, a następnie przekazać nazwę wybranego pliku do zmiennej. Do tej pory mogę uzyskać listę plików, ale po kilku godzinach próbowania nie mogę wymyślić, jak pokazać je jako opcje.Pokaż listę plików i pokaż je w menu z bashem

#!/bin/bash 
prompt="Please select a file:" 
options=($(find -maxdepth 1 -print0 | xargs -0)) 

PS3="$prompt " 
select opt in "${options[@]}" "Quit"; do 

    case "$REPLY" in 
    for i in "${options[@]}" 
    do 
    $i') echo "You picked $opt which is file $REPLY";;' 
    done  
    $((${#options[@]}+1))) echo "Goodbye!"; break;; 
    *) echo "Invalid option. Try another one.";continue;; 

    esac 

done 

Każda pomoc jest doceniana. Dzięki!

Odpowiedz

20

Nie sądzę case nadaje tutaj:

#!/bin/bash 
prompt="Please select a file:" 
options=($(find -maxdepth 1 -print0 | xargs -0)) 

PS3="$prompt " 
select opt in "${options[@]}" "Quit" ; do 
    if ((REPLY == 1 + ${#options[@]})) ; then 
     exit 

    elif ((REPLY > 0 && REPLY <= ${#options[@]})) ; then 
     echo "You picked $opt which is file $REPLY" 
     break 

    else 
     echo "Invalid option. Try another one." 
    fi 
done  

ls -ld $opt 
+0

Działa świetnie, dzięki! – castaway

+0

Otrzymuję błąd za pomocą powyższego kodu./home/RepLoqt # sh -x RevPrxyLogQuery.sh 'title =' Narzędzie do odwracania dziennika proxy (RepLoqt) 'prompt =' Wybierz plik dziennika, którego chcesz użyć: ++ find ./logfiles -maxdepth 1 -print0 ++ xargs -0 + options = '(./ logfiles ./logfiles/log_18-44 ./logfiles/log_18-3) ' $ '\ r''Reverse Proxy Log Query Tool (RepLoqt) everse dziennik proxy Narzędzie do wysyłania zapytań (RepLoqt) 'PS3 =' Wybierz plik dziennika, który chcesz wysłać zapytanie: 'evPrxyLogQuery.sh: wiersz 7: błąd składni w pobliżu nieoczekiwanego tokenu ' ' evPrxyLogQuery.sh: wiersz 7:' wybierz optuj "$ { opcje [@]} "" Zakończ "; – antman1p

+0

Nieważne, z jakiegoś powodu, ponieważ miałem rozszerzenie .sh na końcu pliku, to dawało mi ten błąd. Kiedy usunąłem rozszerzenie, zadziałało ... Nie jestem pewien dlaczego. – antman1p

0

Nie przegap percol, fzy, smenu i przyjaciół. Z radością przyjmą stdin, zaprezentują przyjazne dla użytkownika menu wyboru z interaktywnym filtrem, a następnie ponownie wybrane linie.