2013-05-06 9 views
8

मैं विशेष रूप से निम्नलिखित बार-देखा प्रपत्र की एक मछली shellscript में उपयोगकर्ता इनपुट एकत्र करने के लिए, कोशिश कर रहा हूँ:मछली के खोल में उपयोगकर्ता की पुष्टि कैसे प्राप्त करें?

This command will delete some files. Proceed (y/N)? 

कुछ चारों ओर खोज के बाद, मैं अभी भी कैसे सफाई से यह करने के लिए यकीन नहीं है।

इन मछलियों में ऐसा करने का एक विशेष तरीका है?

उत्तर

14

सबसे अच्छा तरीका है मैं के बारे में पता builtin read उपयोग करने के लिए है। जो दुर्भाग्य से स्ट्रिंग नहीं ले सकता है, बल्कि इसके बजाय एक फ़ंक्शन लेता है। आप कई स्थानों में यह प्रयोग कर रहे हैं तो आप इस सहायक समारोह बना सकते हैं:

function read_confirm 
    while true 
    read -l -p read_confirm_prompt confirm 

    switch $confirm 
     case Y y 
     return 0 
     case '' N n 
     return 1 
    end 
    end 
end 

function read_confirm_prompt 
    echo 'Do you want to continue? [y/N] ' 
end 

और अपनी स्क्रिप्ट/कार्य में इस तरह इसका इस्तेमाल:

if read_confirm 
    echo 'Do stuff' 
end 
अधिक विकल्पों के लिए

दस्तावेज़ देखें: http://fishshell.com/docs/2.0/commands.html#read

+3

वास्तव में, 'करने के लिए तर्क -p' किसी भी शेल कमांड है, जो के रूप में आप रिक्त स्थान पर उम्मीद कर सकते हैं tokenized हो जाएगी, जैसे हो सकता है 'echo "फ़ाइलें हटाएं? [वाई/एन]:"' 'आपके द्वारा लिंक किए गए दस्तावेज़ से: "-पी PROMPT_CMD या --prompt = PROMPT_CMD इंटरैक्टिव मोड के लिए प्रॉम्प्ट के रूप में खोल कमांड PROMPT_CMD के आउटपुट का उपयोग करता है। डिफ़ॉल्ट प्रॉम्प्ट पढ़ गूंज; set_color सामान्य; आदेश 'set_color हरा है गूंज"> "' –

+0

यह मेरे लिए काम किया लेकिन शीघ्र संकेत मिलता है कि हाँ डिफ़ॉल्ट तथापि स्विच बयान नहीं। – JonoCoetzee

+0

इसके अलावा 'read_confirm के रूप में खाली व्याख्या करेगा, और 'गूंज है सामान ' – Pysis

4

यह चुने गए उत्तर के समान है लेकिन केवल एक समारोह के साथ, मुझे क्लीनर लगता है:

function read_confirm 
    while true 
    read -p 'echo "Confirm? (y/n):"' -l confirm 

    switch $confirm 
     case Y y 
     return 0 
     case '' N n 
     return 1 
    end 
    end 
end 

तत्काल फ़ंक्शन को इस तरह रेखांकित किया जा सकता है।

2

यहाँ वैकल्पिक, डिफॉल्ट की शीघ्र के साथ एक संस्करण है:

function read_confirm --description 'Ask the user for confirmation' --argument prompt 
    if test -z "$prompt" 
     set prompt "Continue?" 
    end 

    while true 
     read -p 'set_color green; echo -n "$prompt [y/N]: "; set_color normal' -l confirm 

     switch $confirm 
      case Y y 
       return 0 
      case '' N n 
       return 1 
     end 
    end 
end 
1

कुछ मछली प्लगइन्स fisherman और get

की मदद से बस अपने मछली खोल में दोनों स्थापित करने के लिए

curl -Lo ~/.config/fish/functions/fisher.fish --create-dirs https://git.io/fisher 
. ~/.config/fish/config.fish 
fisher get 

तो आप अपने मछली समारोह/स्क्रिप्ट

012 में ऐसा कुछ लिख सकते हैं
get --prompt="Are you sure [yY]?:" --rule="[yY]" | read confirm 
switch $confirm 
    case Y y 
    # DELETE COMMAND GOES HERE 
end 
संबंधित मुद्दे