2013-04-04 8 views
13

के साथ मेनू में दिखाएं। मैं एक निर्देशिका में फ़ाइलों को बैश स्क्रिप्ट में विकल्पों के रूप में उपयोग करने का प्रयास कर रहा हूं। उपयोगकर्ता को एक का चयन करने में सक्षम होना चाहिए और फिर चयनित फ़ाइल का नाम एक चर में पास करना चाहिए। अब तक मैं फ़ाइलों की सूची प्राप्त कर सकता हूं, लेकिन कुछ घंटों के बाद कोशिश कर रहा हूं कि मैं उन्हें विकल्पों के रूप में दिखाने का तरीका नहीं समझ सकता।फ़ाइलें सूचीबद्ध करें और उन्हें बैश

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

किसी भी मदद की बहुत सराहना की जाती है। धन्यवाद!

उत्तर

20

मुझे नहीं लगता कि case यहाँ उपयुक्त है:

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

अच्छा काम करता है, धन्यवाद! – castaway

+0

मुझे उपरोक्त कोड का उपयोग कर त्रुटि मिल रही है।/home/RepLoqt # sh -x RevPrxyLogQuery.sh 'शीर्षक =' रिवर्स प्रॉक्सी लॉग क्वेरी टूल (रिपलोक्ट) 'प्रॉम्प्ट =' लॉग फ़ाइल का चयन करें जिसे आप क्वेरी करना चाहते हैं: ++ find ./logfiles -maxdepth 1 -print0 ++ xargs -0 + विकल्प = '(./ logfiles ./logfiles/log_18-44 ./logfiles/log_18-3) ' $ '\ r''Veverse प्रॉक्सी लॉग क्वेरी टूल (RepLoqt) सिक्स प्रॉक्सी लॉग क्वेरी टूल (RepLoqt) 'PS3 =' उस लॉग फ़ाइल का चयन करें जिसे आप क्वेरी करना चाहते हैं: 'evPrxyLogQuery.sh: पंक्ति 7: अप्रत्याशित टोकन ' ' evPrxyLogQuery.sh: पंक्ति 7: 'ऑप्टिमाइज़ त्रुटि' $ { विकल्प [@]} "" छोड़ें "; – antman1p

+0

किसी कारण से, कभी भी ध्यान न दें, क्योंकि मेरे पास फ़ाइल के अंत में .sh एक्सटेंशन था, यह मुझे वह त्रुटि दे रहा था। एक बार जब मैंने एक्सटेंशन हटा दिया, तो यह काम किया ... मुझे यकीन नहीं है कि क्यों। – antman1p

0

percol, fzy, smenu और दोस्तों के न चूकें। वे खुशी से stdin से ले लेंगे, इंटरैक्टिव फ़िल्टर के साथ एक उपयोगकर्ता के अनुकूल चयन मेनू पेश करते हैं, फिर पाइप चयनित लाइनों फिर से बाहर।

संबंधित मुद्दे