বাশ ফাংশনগুলিকে কীভাবে কল করবেন


28

সম্ভবত আমি এটি ভুল উপায়ে দেখছি .. তবে আমি এখানে যা করার চেষ্টা করছি। আমার বেশিরভাগ কাজ জাভা দিয়ে করুন তবে কেবল একটি ইউনিক্স (ব্যাশ) পরিবেশে স্যুইচ করুন। আমি এটি করছি:

[~/Desktop/bashPlay]% cat myFunc
#!/bin/bash

ls2(){
        echo "Hello World"
}

ls3(){
        echo "Testing"
}

echo "this is a test"   
ls2 # this calls a function

[~/Desktop/bashPlay]% myFunc
this is a test
Hello World

তবে আমার ফাইলে আমার দুটি ফাংশন রয়েছে এবং আমি কমান্ড লাইন থেকে তাদের আলাদাভাবে কল করতে সক্ষম হতে চাই। উদাহরণস্বরূপ: myFunc.ls2()বা এমনকি ঠিক ls2। আমি জানি যে আমি আমার .bashrcফাইলে ফাংশনগুলি যুক্ত করতে পারি তবে এই ফাংশনগুলিকে আমার সাথে যুক্ত না করেই আমি অন্য কোন উপায়ে কার্যকর করতে পারি .bashrc?

উত্তর:


25

এটি করার একটি উপায়, যাতে আরও কিছুটা টাইপ করা জড়িত, তা হ'ল sourceকমান্ডের মাধ্যমে । MyFunc থেকে কোনও ফাংশন কল করতে আপনি ব্যবহার করতে পারেন source myFunc; ls2এবং এটি হ্যালো ওয়ার্ল্ডকে আউটপুট দেয়।

সুতরাং উদাহরণস্বরূপ, আমার কাছে একটি ফাইল রয়েছে say.sh:

#!/bin/bash

function talk()
{
        echo "hi!"
}

এখন আমি talk()কমান্ড লাইন থেকে এটি ফাংশন বলতে চাই :

[জন @ অসাধারণ ~] $ উত্স বলুন.sh; আলাপ
Hi!

এটি অন্য ব্যাশ স্ক্রিপ্ট থেকে কল করতে:

#!/bin/bash
source say.sh
talk

আপনি প্রতিটি পৃথক স্ক্রিপ্টে রাখতে পারেন এবং সেগুলি আপনার PATH ভেরিয়েবলের ডিরেক্টরিতে যুক্ত করতে পারেন।

সুতরাং উদাহরণস্বরূপ, এক স্ক্রিপ্টে helloআপনি চাইছেন:

#!/bin/bash
echo "Hello World"

এখন আপনার PATH- এ ডিরেক্টরি, যা আপনি চালিয়ে দেখতে পারেন এক লাগাতে echo $PATH। আপনি যদি চান বা কোনও বিদ্যমান ব্যবহার করতে চান তবে আপনি আপনার পাঠ্যপুস্তকে অন্য ডিরেক্টরি যুক্ত করতে পারেন। একবার আপনি সেখানে ফাইলটি অনুলিপি করার পরে এটি সম্পাদনযোগ্য করে নিন chmod +x filename


3
কেবল পরিষ্কার হতে: আপনাকে কেবল একবার স্ক্রিপ্ট বা শেল প্রারম্ভের সময় ফাইলটি উত্স করতে হবে। আপনি এরপরে পুনরায় উত্সাহিত ফাইলটি উল্লেখ না করে ফাংশনটি যতবার আপনি চান তার পরে কল করতে পারেন।
পরবর্তী বিজ্ঞপ্তি না দেওয়া পর্যন্ত বিরতি দেওয়া হয়েছে।

5

আরেকটি পদ্ধতির নাম হবে একটি স্ক্রিপ্ট তৈরি করা functions.sh( ~/binউদাহরণস্বরূপ ডিরেক্টরিতে)।

এই স্ক্রিপ্টে, আপনি আপনার সমস্ত ব্যক্তিগত ফাংশন সংজ্ঞা যুক্ত করুন (আসুন প্রতিবার আপনি কোনও ফাংশন যুক্ত করার পরে বলুন যে আপনি এই ফাইলে যুক্ত করবেন ...)

শেষ পর্যন্ত আপনাকে কেবল source ~/bin/functions.shআপনার .bashrcফাইলটিতে লাইন যুক্ত করতে হবে। আপনি কমান্ড লাইন থেকে তাদের কল করতে সক্ষম হবেন .bashrc, আপনি পরিষ্কার থাকবেন এবং আপনার ব্যক্তিগত ক্রিয়াকলাপের জন্য আপনার একটি নির্দিষ্ট জায়গা থাকবে have


5

আপনি যদি আমার মতো হন তবে আপনি আপনার পরিবেশকে ফাংশন দিয়ে বিশৃঙ্খলা করতে চান না। আপনার সাথে একটি ফাংশনের একটি গ্রুপ রয়েছে যা তারা যা করে সেগুলির সাথে একত্রে অন্তর্ভুক্ত, সুতরাং তাদের একই স্ক্রিপ্ট ফাইলে রাখলে তা বোঝা যায়। (আমি জানি যে একাধিক ফাইল সহ একটি ফোল্ডার একই উদ্দেশ্যে কাজ করতে পারে)। এখানে একটি সম্ভাব্য সমাধান যা আপনাকে স্ক্রিপ্টের একটি নির্দিষ্ট ফাংশনটিতে কল করতে দেয়:

$ cat functions.sh    
#!/bin/bash

ls2() {
        echo "Hello World"
}

ls3() {
        echo "Testing $*"
}

# the next line calls the function passed as the first parameter to the script.
# the remaining script arguments can be passed to this function.

$1 $2 $3 $4 $5 

$ ./functions.sh ls2    
Hello World   
$ ./functions.sh ls3    
Testing     
$ ./functions.sh ls3 first_arg    
Testing first_arg    
$

আমি sourceএটির চেয়ে অনেক বেশি পছন্দ করি যেহেতু এটি দুটি ভিন্ন শ ফাইলগুলিতে একই নামের দুটি ফাংশন হ্যান্ডেল করতে পারে। আমি প্রতিস্থাপন প্যারামিটার একটি অবাধ সংখ্যা পরিচালনা করার জন্য এটি পরিশ্রুত $1 $2 $3 $4 $5সঙ্গেFUNC_CALL=$1; shift; $FUNC_CALL "$@"
চাক Wilbur

@ চক উইলবার: হুপ করে কেন ঝাঁপ দাও? কেবল শেষ পংক্তিতে পরিবর্তন করুন "$@"। পিএস আপনার পদ্ধতির আসলে ভুল; শেষ অংশটি হওয়া উচিত "$FUNC_CALL" "$@"  (অর্থাত,  $FUNC_CALLউদ্ধৃতিতে হওয়া উচিত)।
স্কট

কী "$FUNC_CALL"?
ctrl-alt-delor

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