2013-04-04 6 views
13

Ich versuche, die Dateien in einem Verzeichnis als Optionen in einem Bash-Skript zu verwenden. Der Benutzer sollte in der Lage sein, einen auszuwählen und dann den Namen der ausgewählten Datei in eine Variable zu übergeben. Bis jetzt kann ich die Liste der Dateien bekommen, aber nach ein paar Stunden versuche ich nicht herausfinden, wie man sie als Optionen zeigt.Dateien auflisten und in einem Menü mit Bash anzeigen

#!/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 

Jede Hilfe wird sehr geschätzt. Vielen Dank!

Antwort

20

Ich glaube nicht, case geeignet ist hier:

#!/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

Funktioniert gut, danke! – castaway

+0

Ich erhalte einen Fehler mit dem obigen Code./home/RepLoqt # sh -x RevPrxyLogQuery.sh 'title =' Reverse-Proxy-Log-Abfrage-Tool (RepLoqt) 'prompt =' Wählen Sie die Protokolldatei, die Sie abfragen möchten: ++ finden ./logfiles -maxdepth 1 -print0 ++ xargs -0 + Optionen = '(./ Logdateien ./logfiles/log_18-44 ./logfiles/log_18-3) ' $ '\ r''Reverse Proxy-Log-Abfrage-Tool (RepLoqt) Everse-Proxy-Log Abfrage-Tool (RepLoqt) 'PS3 =' Wählen Sie die Protokolldatei, die Sie abfragen möchten: 'evPrxyLogQuery.sh: Zeile 7: Syntaxfehler in der Nähe des unerwarteten Tokens ' ' evPrxyLogQuery.sh: Zeile 7:' opt in "$ { Optionen [@]} "" Beenden "; – antman1p

+0

Egal, aus irgendeinem Grund, weil ich die Erweiterung .sh am Ende der Datei hatte, gab es mir diesen Fehler. Sobald ich die Erweiterung entfernt habe, hat es funktioniert ... Ich bin mir nicht sicher warum. – antman1p

0

Sie Percol, FZY, smenu und Freunde nicht entgehen lassen. Sie nehmen sie gerne von der Standardeingabe, präsentieren ein benutzerfreundliches Auswahlmenü mit einem interaktiven Filter und streichen dann ausgewählte Linien wieder heraus.

Verwandte Themen