বাশ স্ক্রিপ্টে হ্যাঁ / নায়ের জন্য ব্যবহারকারীকে অনুরোধ করার জন্য কোনও ডিফল্ট ফাংশন / ইউটিলিটি আছে কি?


14

কখনও কখনও আমাকে কিছু নিশ্চিত করার জন্য ব্যবহারকারীকে হ্যাঁ / না জিজ্ঞাসা করতে হবে।

সাধারণত আমি এই জাতীয় কিছু ব্যবহার করি:

# Yes/no dialog. The first argument is the message that the user will see.
# If the user enters n/N, send exit 1.
check_yes_no(){
    while true; do
        read -p "$1" yn
        if [ "$yn" = "" ]; then
            yn='Y'
        fi
        case "$yn" in
            [Yy] )
                break;;
            [Nn] )
                echo "Aborting..."
                exit 1;;
            * )
                echo "Please answer y or n for yes or no.";;
        esac
    done;
}

এটা করতে একটি ভাল উপায় আছে কি? এই ইউটিলিটিটি কি আমার /binফোল্ডারে ইতিমধ্যে আছে ?


2
আপনি একটি ব্যবহার করে দেখতে পারেন select, তবে অন্যথায় আমি এর চেয়ে সহজ উপায় দেখতে পাচ্ছি না।
মুরু

2
@ মুরু, আমি আপনার ধারণাগুলি পুরোপুরি চুরি করছি। আমি চাই আমার প্রতিলিপি আপনাদের হাতে তুলে দিতে পারতাম।
গ্লেন জ্যাকম্যান

@glennjackman আমি এটিকে সহযোগিতা বলব। ;)
মুরু

উত্তর:


13

আহ, এখানে অন্তর্নির্মিত কিছু রয়েছে: zenityএটি একটি গ্রাফিকাল ডায়ালগ প্রোগ্রাম:

if zenity --question --text="Is this OK?" --ok-label=Yes --cancel-label=No
then
    # user clicked "Yes"
else
    # user clicked "No"
fi

এছাড়াও zenity, আপনি এর মধ্যে একটি ব্যবহার করতে পারেন:

if dialog --yesno "Is this OK?" 0 0; then ...
if whiptail --yesno "Is this OK?" 0 0; then ...

3
ডায়ালগ প্রোগ্রাম গ্রহণযোগ্য হন, না dialogবা whiptailআরো CLI উপযুক্ত হবে?
মুড়ু

2
প্রকৃতপক্ষে. উত্তরে যুক্ত হয়েছে।
গ্লেন জ্যাকম্যান

1
ব্যক্তিগতভাবে, আমি কাঁটাটাকে পছন্দ করি yad, এতে আরও উন্নতি এবং কম বাগ আইএমও রয়েছে।
স্পারহাক

11

এটা আমার কাছে ভাল লাগছে। আমি এটিকে কিছুটা "ডু অর ডাই" কম করব:

  • যদি "Y" তখন হয় return 0
  • যদি "এন" হয় তবে return 1

এইভাবে আপনি কিছু করতে পারেন:

if check_yes_no "Do important stuff? [Y/n] "; then
    # do the important stuff
else
    # do something else
fi
# continue with the rest of your script

@ মুড়ুর selectপরামর্শের সাথে ফাংশনটি খুব সংক্ষিপ্ত হতে পারে:

check_yes_no () { 
    echo "$1"
    local ans PS3="> "
    select ans in Yes No; do 
        [[ $ans == Yes ]] && return 0
        [[ $ans == No ]] && return 1
    done
}

1

উপসংহার হিসাবে আমি এই স্ক্রিপ্টটি লিখেছিলাম :

#!/bin/bash

usage() { 
    echo "Show yes/no dialog, returns 0 or 1 depending on user answer"
    echo "Usage: $0 [OPTIONS]
    -x      force to use GUI dialog
    -m <string> message that user will see" 1>&2
    exit 1;
}

while getopts m:xh opts; do
    case ${opts} in
        x) FORCE_GUI=true;
            ;;
        m) MSG=${OPTARG}
            ;;
        h) usage
            ;;
    esac
done

if [ -z "$MSG" ];then
    usage
fi

# Yes/no dialog.
# If the user enters n/N, return 1.
while true; do
    if [ -z $FORCE_GUI ]; then
        read -p "$MSG" yn
        case "$yn" in
            [Yy] )
                exit 0;;
            [Nn] )
                echo "Aborting..." >&1
                exit 1;;
            * )
                echo "Please answer y or n for yes or no.";;
        esac
    else
        if [ -z $DISPLAY ]; then echo "DISPLAY variable is not set" >&1 ; exit 1; fi
        if zenity --question --text="$MSG" --ok-label=Yes --cancel-label=No; then
            exit 0
        else
            echo "Aborting..." >&1
            exit 1
        fi
    fi
done;

স্ক্রিপ্টের সর্বশেষ সংস্করণটি এখানে পাওয়া যাবে । পরিবর্তন / সম্পাদনা করতে নিখরচায় পূরণ করুন


0

আমি নিম্নলিখিত ব্যবহার করছি:

  • কোনটিতে ডিফল্ট:
    read -p "??? Are You sure [y/N]? " -n 1
    if [[ ! $REPLY =~ ^[Yy]$ ]]; then
        echo "!!! Canceled by user."
        exit 1
    fi
  • হ্যাঁ ডিফল্ট:
    read -p "??? Are You sure [Y/n]" -n 1
    if [[ $REPLY =~ ^[Nn]$ ]]; then
        echo "!!! Canceled by user."
        exit 1
    fi

0
 read -p 'Are you sure you want to continue? (y/n) ' -n 1 confirmation
 echo ''                                                                                                   
 if [[ $confirmation != 'y' && $confirmation != 'Y' ]]; then                                               
   exit 3                                                                                                
 fi
 # Code to execute if user wants to continue here.
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.