শেলের মধ্যে কীভাবে একটি ফাংশন যুক্ত করতে হবে?


24

আমার একটি ফাংশন রয়েছে যা যুগের সময়কে রূপান্তরিত করে। এখানে সংজ্ঞা দেওয়া হল

date1(){
  date -d @$1
}

আমি লিখতে সক্ষম হতে চাই:

$ date1 xxxyyy

যেখানে xxxyyy হ'ল প্যারামিটারটি আমি আমার ফাংশনে প্রবেশ করি যাতে আমি সংশ্লিষ্ট তারিখটি পেতে পারি। আমি বুঝতে পারছি আমি হয় এটা যোগ আছে .bash_profile, .profileঅথবা .bashrcএবং তারপর উৎস:

$ source file

তবে, আমি নিশ্চিত নই যে কোন ফাইলটি toোকাতে হবে Currently বর্তমানে, আমার কাছে এটি রয়েছে .profile। তবে এটি চালানোর জন্য আমাকে source .profileপ্রতিবারই করতে হবে ।

কম্পিউটারটি যখন পরিবেশের পরিবর্তনশীলের মতো শুরু হয় তখন আদর্শভাবে, এটি উপলব্ধ করা উচিত।


একটি ইনপুট নমুনার জন্য; 1. পাঠ্য আউটপুট epochconverter.com এখন 1514917788; প্রতি 2.from ব্যাশ নিজেই $ তারিখ + +% s stackoverflow.com/questions/1092631/...
AnneTheAgile

উত্তর:


25

থেকে man bash:

যখন বাশকে একটি ইন্টারেক্টিভ লগইন শেল হিসাবে, বা - লগিন বিকল্পের সাথে একটি অ-ইন্টারেক্টিভ শেল হিসাবে ডাকা হয়, এটি প্রথমে ফাইল / ইত্যাদি / প্রোফাইল থেকে কমান্ডগুলি পড়ে এবং কার্যকর করে, যদি সেই ফাইলটি বিদ্যমান থাকে। এই ফাইলটি পড়ার পরে, এটি সেই ক্রমে ash / .bash_profile, ~ / .bash_login, এবং ~ /। প্রোফাইলে অনুসন্ধান করে এবং উপস্থিত এবং পঠনযোগ্য যা প্রথমটি থেকে আদেশগুলি পড়ে এবং কার্যকর করে।

অন্য কথায়, আপনি এটিকে যেকোন একটিতে ~/.bash_profile, ~/.bash_loginবা ~/.profile, বা যে কোনও একটি ফাইলের মধ্যে sourceডি যুক্ত করতে পারেন । সাধারণত ~/.profileউইল উত্স ~/.bashrc, যা "ব্যক্তিগত সূচনা ফাইল, লগইন শেলগুলির জন্য কার্যকর করা হয়।"

এটি সক্ষম করতে, হয় একটি নতুন শেল শুরু করুন, চালান exec $SHELLবা চালান source ~/.bashrc


1
ঠিক আছে, আমি এটির যুক্তি মুদ্রণের একটি কাস্টম ফাংশন তৈরি করার জন্য আপনার উপায়টি চেষ্টা করেছি, তবে আমি যদি সেই ফাংশনটি যুক্ত করি তবে .bash_profileআমি source ~/.bash_profileশর্টকাটে টার্মিনালটি খুলতে প্রতিবারই করতে হবে Ctrl+Alt+T
ভিকি দেব

@ ভিকিডেভ যদি আপনার source ~/.bash_profileপ্রতিবার যেতে হয় তবে এটি ইঙ্গিত দেয় যে আপনার বাশ সেটআপটি কোনওভাবেই মানহীন বা ভাঙা ( man bashউল্লিখিত আউটপুট অনুসারে)। আপনি কি আসলে বাশ চালাচ্ছেন তা নিশ্চিত? উদাহরণস্বরূপ, কিছু echo $BASHPIDমুদ্রণ আছে?
l0b0

কোনও ক্রিয়া সংজ্ঞায়িত করার #!/bin/shজন্য আপনার কি শীর্ষে যুক্ত করতে .profileহবে?
কলব ক্যানিয়ন

13

আপনি আপনার ফাংশন নির্ধারণ .profile, অ্যাড export -f date1। এটি আপনার লগইন শেল দ্বারা ব্যবহৃত ফাংশনটি রফতানি করবে।


রফতানির জন্য +1, আমাকে এসএসএস প্রক্সিকমন্ডে ডাকতে হয়েছিল এবং ওরফে ডাক পড়তে হয়েছিল, এবং এটি উত্সের পরেও খুঁজে পাওয়া যায় নি। রফতানির পরে কবজির মতো কাজ করে।
অভিষেক আনন্দ

7

ইন্টারেক্টিভ শেলগুলির জন্য কাস্টমাইজেশন .োকা ~/.bashrc। আপনি লগ ইন করার সময় যে জিনিসগুলি চালাতে চান সেগুলি প্রবেশ করে ~/.profile(বা ~/.bash_profile, তবে গ্রাফিকালি লগ ইন করার সময় এটি প্রায়শই লোড হয় না)।

এই ফাংশন সংজ্ঞা রাখুন ~/.bashrc

যেহেতু ব্যাশ লোড না .bashrcযখন এটি একটি লগ-ইন শেল, তাই এখান থেকে কি জোর: একটি লিখতে ~/.bash_profileধারণকারী

. ~/.profile
case $- in *i*) . ~/.bashrc;; esac

যেমন লোড ~/.profile, এবং ~/.bashrcশেল ইন্টারেক্টিভ থাকলে লোডও করুন load

.Bashrc এর বিকল্প এবং সেখানে লিঙ্কযুক্ত পোস্টগুলি দেখুন ।


1

csh এবং tcsh বাশের মতো ফাংশন সমর্থন করে না তবে আপনি এটি করতে পারেন।

উদাহরণস্বরূপ এখানে কিছু পাঠ্য মুদ্রণের জন্য একটি সাধারণ ফাংশন

alias print_hello_world 'eval echo "hello world"'

স্ক্রিপ্টে তর্ক বিতর্ক

repeate_after_me 'eval echo "$1"'

মাল্টি লাইন কোড ইফ স্টেটমেন্টের মতো করে করা জটিল তবে আপনারা এখানে যান।

alias X 'eval "if (\!:1 =~ 'yes') then \\
          echo yes \\
          else \\
          echo no \\
          endif"'

আপনার এখনও অবতীর্ণ হতে হবে তবে সবচেয়ে জটিল অংশটি \!:[x]কমান্ড লাইন থেকে ইনপুট পেতে সিনট্যাক্সটি করছে ।

আপনাকে বাছাই করার জন্য এটি যথেষ্ট হবে।


0

আপনি টাইপসেট সহ বাশার্কে সমস্ত বর্তমান ফাংশন পুনর্নির্দেশ করতে পারেন ।

উদাহরণস্বরূপ, আমি এখানে কীভাবে rcচ্ছিক প্যারামিটার সহ একটি ওপেনস্ট্যাক কমান্ডের একটি ফাংশন বাশার্কে যুক্ত করছি:

urc() { . stackrc; set -x; openstack server list --all $1; set +x; }
typeset -f >> ~/.bashrc

এখন এটি ভবিষ্যতের সেশনের জন্য সংরক্ষিত হয়েছে এবং এটি ব্যবহার করা যেতে পারে:

$ urc 

অথবা

$ urc --debug

-1

পয়েন্ট 18: আমার পুরানো স্মৃতিতে যখন অ্যাডমিন, ksh এবং বাশ শিখার চারপাশে কিনারা ছিল। 1: - / ইত্যাদি / প্রোফাইলের সামগ্রীগুলি চওড়া। / ইত্যাদি / স্কেলে নতুন অ্যাকাউন্টগুলিতে দেওয়া ফাইলটি রয়েছে। যেহেতু বাশ এখন সমস্ত ডিস্ট্রোর মধ্যে সাধারণ বিষয়। পরেরটি 2: - standard /। প্রোফাইলে সিস্টেম স্ট্যান্ডার্ড হিসাবে তারপর প্রোফাইলের বিষয়বস্তুগুলির মধ্যে "যদি উপস্থিত থাকে" b আমার মন আরও সঠিক ক্রমানুসারে, স্ট্যান্ডার্ড টার্মিনাল এবং শেল পরিবেশ নির্ধারণ করে এবং স্বাভাবিক ash প্রোফাইলে $ পথ প্রধান হ'ল যদি।
আমি এখন খুব বেশি যোগ করছি খুঁজে পাচ্ছি .বাশ_প্রোফাইল। প্রোফাইলে এখনও আধিপত্য বিস্তার করছে এবং .বাশ_প্রোফাইলের উপস্থিতিটিকে সম্মান করছে না। শিরোনাম তথ্যের পাশাপাশি কেউ আপডেট করছে না যেমন: বাশ প্রারম্ভের নমুনা - সেই ডিরেক্টরি কাঠামো আর নেই - উদাহরণ এবং ফাইলগুলি gzip'd সহ। সুতরাং জ্ঞানু-বাশ-এ আপডেট করুন


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