টার্মিনাল নয়, বাশ ফাংশন থেকে প্রস্থান করুন


12

আমার নীচে নীচে বাশ স্ক্রিপ্ট রয়েছে যা চিড়িয়াখানা ইনস্টল করে তবে কেবল ইতোমধ্যে ইনস্টল করা না থাকলে।

##zookeper
installZook(){

        ZOOK_VERSION="3.4.5"
        ZOOK_TOOL="zookeeper-${ZOOK_VERSION}"
        ZOOK_DOWNLOAD_URL="http://www.us.apache.org/dist/zookeeper/${ZOOK_TOOL}/${ZOOK_TOOL}.tar.gz"

        if [ -e $DEFAULT_INSTALLATION_DEST/${ZOOK_TOOL} ]; then
                echo "${ZOOK_TOOL} alreay installed";
                exit 1;      # <<<< here
        elif [ ! -e $DEFAULT_SOURCE_ROOT/${ZOOK_TOOL}.tar.gz ]; then
                wgetIt $ZOOK_DOWNLOAD_URL
        else
                echo "[info] : $DEFAULT_SOURCE_ROOT/$ZOOK_TOOL already exists"
        fi

        sudo mkdir -p /var/lib/zookeeper
        sudo mkdir -p /var/log/zookeeper

        tarIt "$DEFAULT_SOURCE_ROOT/$ZOOK_TOOL.tar.gz"
        sudo chmod 777 -R $DEFAULT_INSTALLATION_DEST/$ZOOK_TOOL
        cp $DEFAULT_INSTALLATION_DEST/$ZOOK_TOOL/conf/zoo_sample.cfg $DEFAULT_INSTALLATION_DEST/$ZOOK_TOOL/conf/zoo.cfg
cat >> ~/.bash_profile <<'EOF'

  ###############################
  ########### ZOOK ###############
  ###############################
  ZOOK_HOME=/usr/local/zookeper-3.4.5
  export ZOOK_HOME
  export PATH=$PATH:$ZOOK_HOME/bin

EOF
}

চিহ্নিত লাইনে <<<< here, চিড়িয়াখানাটি ইতিমধ্যে ইনস্টল করা থাকলে আমি যা চাই তা নীচের স্ক্রিপ্টটি থেকে বেরিয়ে আসা। কিন্তু ব্যবহার exitকরে টার্মিনালটি নিজেই প্রস্থান করে।


1
আপনি এই স্ক্রিপ্টটি কীভাবে চালু করবেন?
বেনোইট

2
ব্যবহার return 1পরিবর্তেexit 1
polym

উত্তর:


21

টি এল; ডিআর

returnপরিবর্তে ব্যবহার করুন exitএবং আপনার স্ক্রিপ্টটি source your-script.shওরফে দিয়ে চালান ।. your-script.sh

সম্পূর্ণ তথ্যাদি

যদি exitএটিতে কোনও বিবৃতি সহ কোনও স্ক্রিপ্ট চালু করা হয় তবে আপনার বর্তমান সন্তানের শিশু হিসাবে আপনাকে এটি চালু করতে হবে।

আপনি এটি আপনার টার্মিনাল সেশন দিয়ে শুরু বর্তমান শেল ভিতরে আরম্ভ হলে ( . ./<scriptname>কোন exitপ্রধান শেল, আপনার টার্মিনাল সেশন বরাবর শুরু এক বন্ধ করে দেব।

তোমার মত আপনার স্ক্রিপ্টটি চালু ছিল bash ./<scriptname>(অথবা পরিবর্তে অন্য কোন শেল ব্যাশ ), তারপর exitআপনার সন্তানের শেল আপনার টার্মিনাল দ্বারা ব্যবহৃত এক থামিয়ে না করত।

যদি আপনার স্ক্রিপ্টে এক্সিকিউটেবল অনুমতি থাকে তবে শেলটির নাম না দিয়েই সরাসরি চালনা করলে এটি একটি শিশু শেলের মধ্যেও কার্যকর হবে।

returnপরিবর্তে ব্যবহার করা exitআপনাকে . ./<script name>বর্তমান শেলটি বন্ধ না করেই এখনও আপনার স্ক্রিপ্টটি চালু করতে দেয় । তবে আপনাকে returnকেবল কোনও ফাংশন বা সর্সযুক্ত স্ক্রিপ্ট থেকে বেরিয়ে আসতে ব্যবহার করতে হবে ( . ./<scriptname>সিন্টেক্সটি ব্যবহার করে স্ক্রিপ্টটি চালানো হয়েছিল )।


returnস্ক্রিপ্ট ফাইলটি
নাম জি ভি ইউ

@ নামজিভিউ ইউটিউটের পরিবর্তে প্রত্যাবর্তন করা সঠিক জিনিস। ধরে নিই যে তারা ফাইলটি উত্স করেছে এবং তারপরে ফাংশনটি কল করবে ( প্রদত্ত ফাইলটি সোর্স করার সময় ফাংশনটিতে exit/ / কল করা returnহবে না ), ফাংশনটি ব্যবহৃত হলে শেল সেশনটি (টার্মিনালের সাথে একসাথে) সমাপ্ত হবে exit। এর সাথে return, এটি কলিং শেলের কাছে নিয়ন্ত্রণটি পরিচালনা করবে। মনে রাখবেন যে আপনি যদি স্রোসযুক্ত স্ক্রিপ্ট থেকে ফিরে আসতে চান (যা এটি সম্পর্কে নয়) তবে শেল সেশনটি সমাপ্ত returnহওয়ার সাথে exitসাথে এটি করার সঠিক উপায় ।
কুসালানন্দ

আপনি স্ক্রিপ্টটি কীভাবে প্রথম স্থানে চালাবেন তার উপর এটি নির্ভর করে
নাম জি ভি ইউ

@ নামজিভিউ ফাইলটিতে ফাংশনের জন্য কোনও কল নেই। কেবলমাত্র সোর্সিং করা বা ফাইল চালানো ফাংশনটিকে কল করবে না। প্রথমে ফাইলটি সোর্স করে এবং তারপরে টার্মিনালে কল করে কীভাবে ফাংশন শেল সেশন এবং টার্মিনালটিকে অন্য কোনও উপায়ে শেষ করে তা ব্যাখ্যা করুন।
কুসালানন্দ

ভাগ করে নেওয়ার জন্য থ্যাঞ্জস। আমি মনে করি আমরা তখন বিষয় থেকে খুব বেশি দূরে যাব না।
নাম জি ভিইউ

1

প্রদত্ত স্ক্রিপ্টটি শেল সেশনটি (এবং সেইজন্য টার্মিনালটি) শেষ করতে সক্ষম হওয়ার একমাত্র উপায় হ'ল স্ক্রিপ্টটি সোর্সিং করে ( installZookবর্তমান শেল সেশনে ফাংশন ইনস্টল করতে ) এবং তারপরে শেলের মধ্যে ফাংশনটি চালানো।

যদি আপনি যা দেখছেন সেটি যদি installZookফাংশনে কলযুক্ত বৃহত্তর স্ক্রিপ্টের কেবলমাত্র একটি অংশ থাকে, তবে ফাংশনটি এখনও স্ক্রিনটি স্রোত করা থাকলে টার্মিনালটি কেবলমাত্র বন্ধ করতে পারে তবে সাধারণ শেল স্ক্রিপ্ট হিসাবে চালিত না হয়ে।

exitবর্তমান শেল সেশনটি সমাপ্ত করে। যখন ফাংশনটি সম্পাদন করে exitতখন এটি শেলকে এটি বন্ধ করে দেয় যা এটি বলে।

returnএকটি ফাংশন (বা উত্সযুক্ত স্ক্রিপ্ট ফাইল) থেকে ফিরে আসে। যদি ফাংশনটি পরিবর্তে exitব্যবহৃত হয় return, এটি কলিং পরিবেশে (সম্ভবত ইন্টারেক্টিভ শেল যেটি থেকে আপনি ফাংশনটি কল করেছিলেন) এটি না বেরিয়েই নিয়ন্ত্রণটি ফিরে আসবে।

আপনি যদি installZookশেল থেকে ম্যানুয়ালি ফাংশনটি চালান , তবে আপনাকে যা করতে হবে তা হ'ল এটি পরিবর্তন exitকরা return। যদি আপনার স্ক্রিপ্টে কোডের আরও একটি অংশ রয়েছে যা ফাংশনটিকে কল করে (এবং যা আপনি প্রদর্শন করছেন না), তবে সেই টুকরা কোডটির অতিরিক্তভাবে ফাংশনটির ফিরে আসার প্রতিক্রিয়া দেখাতে হবে।

উদাহরণ স্বরূপ

installZook || return

এটি যদি স্ক্রিপ্টের কোনও ফাংশনের অংশ না হয়ে থাকে এবং আপনি যদি স্ক্রিপ্টটি উত্সাহিত করেন তবে ফাংশনটি শূন্যের বহির্গমন কোডটি ফিরিয়ে দিলে এটি শেলের নিয়ন্ত্রণ ফিরে পাবে।


আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.