আমি কোথায় একটি ব্যবহারকারী-সংজ্ঞায়িত শেল ফাংশন রাখতে পারি?


14

আমি এমন একটি ফাংশন তৈরির পরিকল্পনা করছি যা আমার জন্য জিনিসগুলি সহজতর করবে। ফাংশন কিছু হবে

function lazymode()
{
echo "Hello World!";
}

যাতে আমি যখন কমান্ড ব্যবহার lazymodeমধ্যে শেল , এটা আউটপুট হবে Hello World!

ব্যবহারকারীর সংজ্ঞায়িত ফাংশনটি আমার কোন ফাইলের মধ্যে রাখা উচিত?

উত্তর:


14

ফাংশন উপর নির্ভর করে। যদি এটির মতো কেবল একটি অতি-সরল ওয়ান-লাইনার আপনি একটি উপনাম তৈরি করতে পারেন বা এতে ফাংশনটি আটকে রাখতে পারেন ~/.bashrc(এটি শুরু হওয়ার সাথে সাথে একটি ফাইল বাশ বোঝায়)।

আপনি যদি কিছুটা আরও মাংসপেশী কিছু তৈরি করে থাকেন তবে এটির নিজস্ব নির্বাহযোগ্য স্ক্রিপ্ট তৈরি করা আরও বোধগম্য হতে পারে ~/bin/যেখানে ডিফল্টরূপে এটি উপস্থিত নেই (এটি কেবল একটি ডিরেক্টরি) তবে আপনার পথে থাকা উচিত। এটির জন্য মনে রাখবেন ফাইলটি এক্সিকিউটেবল ( chmod +x filename) হতে হবে এবং সঠিক #!/bin/bashস্তরের সাথে শুরু করা দরকার ।

দ্বিতীয় রুটের কিছু স্পষ্ট সুবিধা রয়েছে:

  • কী পাওয়া যায় তা দেখতে এটি আরও সহজ
  • একটি সিনট্যাক্স ত্রুটি আপনার প্রোফাইলকে ট্যাঙ্ক করবে না
  • আপনি যদি স্ক্রিপ্ট পরিবর্তন করেন তবে আপনাকে আপনার ব্যাশ কনফিগারেশনের পুনরায় সোর্সিং রাখার দরকার নেই
  • যতক্ষণ না পুরো পাথ ব্যবহার করা হয় বা সেই শেলেরও পথে থাকে যতক্ষণ না এটি শেলকে উপলভ্য হয় ~/bin/(এটি বেশিরভাগ ক্ষেত্রে এএফএইসি হওয়া উচিত)।

আমি পরবর্তী বিকল্পটি ব্যবহার করেছি। আমার ফাংশনটিতে এমন কমান্ড রয়েছে যা ফাইল মুছবে, উইজেটের কিছু হবে, জাভাক এবং জাভা কমান্ড কার্যকর করে। এবং যখন আমি এটি জিনোম-টার্মিনালে চেষ্টা করেছি, এটি ঠিকঠাক কাজ করছে না। আপনি কি মনে করেন কোনও সমস্যা আছে?
আবেল মেলকুইয়েডেস ক্যাল্লেজো

পরিবর্তে এটি কি করে?
অলি

এটি ইতিমধ্যে স্থির। এই উত্তরের মাধ্যমে স্থির
আবেল মেলকুইয়েডস কল্লেজো

উম্ম ... এর /usr/local/binপরিবর্তে ব্যবহারকারীর স্ক্রিপ্টগুলি থাকা উচিত নয় $PATH?
ব্রায়াম

এটি আমার কাছে মনে হয় যে ফাংশনগুলি রাখার ~/.bashrc(তবে এটি sourceডি) একটি ছোট্ট তবে মূল্যবান উল্লেখযোগ্য সুবিধা হ'ল প্যাশ লুকআপ করার আগে বাশ ফাংশনগুলি সন্ধান করে।
Zanna

4

সেরা পছন্দ ~/.bashrcফাইল হবে।

আপনাকে হয় অবশ্যই আপনার সরাসরি আপনার শেল ফাংশন সংজ্ঞা লিখতে পারেন ~/.bashrcফাইল, বা, যদি আপনি তাদের প্রচুর আছে এবং আপনার বিশৃঙ্খল করতে চাই না ~/.bashrcফাইল, আপনি আপনার পছন্দসই অন্য ফাইল তাদের সব লাগাতে পারেন - উৎস শুধু সেই বিষয়ে নিশ্চিত থাকুন যে আপনার ~/.bashrcফাইল ফাইল। উদাহরণস্বরূপ, যদি আপনার ফাংশনগুলির সাথে ফাইলটির নাম দেওয়া হয় bash_functionsতবে কেবল আপনার ~/.bashrcফাইলটিতে লাইনগুলি যুক্ত করুন:

if [[ -f /path/to/bash_functions ]]; then
    source /path/to/bash_functions
fi

বা, সমতুল্য:

if [[ -f /path/to/bash_functions ]]; then
    . /path/to/bash_functions
fi

যেখানে এটি .কেবল একটি প্রতীকী উপস্থাপনা sourceifপরীক্ষা তোলে নিশ্চিত ফাইল /path/to/bash_functionsএটা উৎস চেষ্টা করার আগে থেকেই আছে।

এই কৌশলটি অ্যালিয়াস স্থাপনের সাথে অনুরূপ ~/.bashrcএকটি ফাইল তৈরি ~/.bash_aliasesকরে এবং ~/.bashrcএর অস্তিত্বের জন্য পরীক্ষা করার জন্য উপরেরটির সাথে অনুরূপ সিনট্যাক্স ব্যবহার করে এবং এর উত্স উত্স করে।


ধন্যবাদ, এটি কাজ করেছে। যাইহোক,। প্রোফাইলের সাথে এর পার্থক্য কী? কিছু লিনাক্সে, আমি বাশার্কে ফাংশন রাখতে পারি না
আবেল

2
~/.profileলগইন শেলগুলির জন্য ফাইলটি কমান্ড ইন্টারপ্রেটার দ্বারা সম্পাদন করা হয়। আপনি যখন জিইআইআই ব্যবহার করেন এবং আপনি টার্মিনালটি খোলেন, সেই ফাইলটি কার্যকর করা হয় না কারণ আপনি লগইন শেলটিতে থাকবেন।
রাদু রেডানু

1

স্থায়ী ফাংশন ঘোষণার জন্য এখানে একটি প্রয়োজনীয় প্রক্রিয়া রয়েছে:

  1. ~/.bashrcএকটি পাঠ্য সম্পাদক এ ফাইল খুলুন । কোন পাঠ্য সম্পাদকটি গুরুত্বপূর্ণ নয়, যতক্ষণ আপনি এটি কীভাবে ব্যবহার করতে জানেন এবং যতক্ষণ আপনি এটি খুলেন open/home/<username>/.bashrc

  2. ~/.bashrcঘোষণা শেষে আপনার নিজের ফাংশনটি ঘোষণা করুন, উদাহরণস্বরূপ:

    find_dirs(){
        find "$1" -type d
    }
  3. সংরক্ষণ করুন এবং ফাইলটি বন্ধ করুন।

~/.bashrcআপনি যে ফাইলটি ইন্টারেক্টিভ শেল (নতুন টার্মিনাল ট্যাব, লগইন মাধ্যমে যে খুলতে প্রত্যেক সময় পড়া হয় ssh, অথবা খোলা TTY1 বা অন্যান্য ভার্চুয়াল কনসোল)। এটি স্ক্রিপ্ট ফাইলগুলিতে উপলব্ধ হবে না, কারণ ~/.bashrcঅ ইন্টারেক্টিভ শেলগুলির জন্য পড়েনি। আপনি বিকল্পটি bashদিয়ে --norcচালালে এটিও পাওয়া যায় না ।

আপনি যদি বর্তমানে খোলা ট্যাবটিতে তত্ক্ষণাত ফাংশনটি উপলভ্য করতে চান তবে source ~/.bashrcকমান্ডটি ব্যবহার করুন ।


ফাংশনগুলি নিয়মিত কমান্ডের মতোই আর্গুমেন্ট গ্রহণ করে। উদাহরণস্বরূপ, $1মাধ্যমে $9অবস্থানগত পরামিতি ইঙ্গিত যখন আপনি একটি ফাংশন কল। উপরের উদাহরণে find_dirsকেবলমাত্র একটি অবস্থানগত পরামিতি লাগে এবং এটি হিসাবে ডাকা হবে find_dirs /etc। আপনি $@সমস্ত অবস্থানগত পরামিতিগুলি উল্লেখ করতেও ব্যবহার করতে পারেন । ফাংশনগুলি পুনঃনির্দেশও গ্রহণ করে। আপনি এর সাথে একটি ফাংশন কল করতে পারেন find_dirs $1 > /dev/null; আমরা নিম্নলিখিত হিসাবে এটি ঘোষণা করতে পারে:

find_dirs(){
    find "$1" -type d
}

থেকে নোট man bash: "বর্তমান শেল প্রসঙ্গে কার্যগুলি কার্যকর করা হয়; তাদের ব্যাখ্যা করার জন্য কোনও নতুন প্রক্রিয়া তৈরি করা হয় না"। এর অর্থ হ'ল আপনার শেল প্রয়োগের পরিবেশ পরিবর্তন করার ক্ষমতা - ভেরিয়েবল এবং টার্মিনাল সেটিংস পরিবর্তন করার ক্ষমতা সম্পর্কে আপনারও সচেতন হওয়া উচিত।

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