উপন্যাস এবং ফাংশন


17

বাশ ম্যানুয়াল থেকে

উপকরণের সংজ্ঞা এবং ব্যবহার সম্পর্কিত বিধিগুলি কিছুটা বিভ্রান্তিকর। বাশ সর্বদা line লাইনের যে কোনও কমান্ড কার্যকর করার আগে কমপক্ষে একটি সম্পূর্ণ ইনপুট লাইন পড়ে। কমান্ড পড়ার সময় উপাধিগুলি প্রসারিত হয়, যখন তা কার্যকর করা হয় না। সুতরাং, অন্য একটি কমান্ড হিসাবে একই লাইনে উপস্থিত একটি উপনাম সংজ্ঞাটি পরবর্তী ইনপুটটির লাইনটি পড়া না হওয়া পর্যন্ত কার্যকর হয় না। Line লাইনে ওরফে সংজ্ঞা অনুসরণকারী কমান্ডগুলি নতুন উপন্যাস দ্বারা প্রভাবিত হবে না। ফাংশনগুলি কার্যকর করা হলে এই আচরণটিও একটি সমস্যা। কোনও ফাংশন সংজ্ঞা পড়লে উপকরণগুলি প্রসারিত হয় , ফাংশনটি কার্যকর হওয়ার সময় নয় , কারণ কোনও ফাংশন সংজ্ঞা নিজেই একটি যৌগিক আদেশ হয়। এর ফলে, কোনও ফাংশনে সংজ্ঞায়িত এলিয়াসগুলি সেই ফাংশনটি কার্যকর হওয়ার পরে পাওয়া যায় না । নিরাপদে থাকার জন্য, সর্বদা পৃথক লাইনে উরফ সংজ্ঞা রাখুন, এবং যৌগিক কমান্ডগুলিতে উপনাম ব্যবহার করবেন না।

দুটি ফাংশন "ফাংশন সংজ্ঞা পড়া হয় তখন দুটি প্রসারিত হয়, যখন ফাংশনটি সম্পাদন করা হয় না" এবং "ফাংশনটিতে সংজ্ঞায়িত এলিয়াসগুলি সেই ফাংশনটি কার্যকর হওয়ার পরে পাওয়া যায় না" বলে মনে হয় একে অপরের বিরোধী বলে মনে হচ্ছে।

তারা যথাক্রমে কি বোঝাতে পারেন?


ভাল প্রশ্ন! আমি আজ নতুন কিছু ঝুঁকেছি। আমি 2 টি জিনিস শিখেছি, আসলে: 1) ফাংশন ডিএফ পড়ার সময় ওরফে সম্প্রসারণ সম্পর্কে এই তথ্য এবং 2) যে আমার সত্যিই বাশ ম্যানুয়ালটি সাবধানতার সাথে পড়া উচিত (যা আমি ভেবেছিলাম যে আমি ইতিমধ্যে করেছি, তবে দৃশ্যত তা হয়নি ^^ )
অলিভিয়ার ডুলাক

4
মূল প্রশ্নটি হ'ল, কেউ কি নন-ইন্টারেক্টিভ মোডে এলিয়াস ব্যবহার করতে হবে? এটিই ফাংশনগুলির জন্য এবং অ্যালিয়াসগুলি স্ক্রিপ্টিংটিকে আরও ত্রুটি-ঝুঁকির মধ্যে ফেলে। আমার উপরের তথ্যটির সত্যই আমার কখনই প্রয়োজন হয়নি, কারণ আমি কেবল কখনও .bashrcখুব উপরে থাকা ফাইলগুলিতে এলিয়াসের মুখোমুখি হয়েছি ।
প্রাচ্য

উত্তর:


29
  1. কোনও ফাংশন সংজ্ঞা পড়লে উপকরণগুলি প্রসারিত হয়, ফাংশনটি কার্যকর হওয়ার সময় নয় ...

    cho প্রতিধ্বনি "দ্রুত ব্রাউন শিয়াল অলস কুকুরটির উপরে লাফিয়ে উঠেছে।" > মাইফাইল
     
    $ ওরফে মিয়ালিয়াস = বিড়াল
     
    $ myfunc () {
    > মিয়ালিয়াস মাইফিল
    >}
     
    $ myfunc
    দ্রুত ব্রাউন শিয়াল অলস কুকুরটির উপরে ঝাঁপিয়ে পড়ে।
     
    $ ওরফে মিয়ালিয়াস = "এলএস-এল"
     
    $ মিয়ালিয়াস মাইফিল
    -rw-r - r-- 1 মাইউজারনেম মাইগ্রুপ 45 ডিসেম্বর 13 07:07 মাইফাইল
     
    $ myfunc
    দ্রুত ব্রাউন শিয়াল অলস কুকুরটির উপরে ঝাঁপিয়ে পড়ে।

    যদিও myfuncকল করার জন্য সংজ্ঞায়িত হয়েছিল myaliasএবং আমি নতুন সংজ্ঞা দিয়েছি myalias, myfuncতবুও এর মূল সংজ্ঞাটি কার্যকর করে myalias। কারণ ফাংশন সংজ্ঞায়িত হওয়ার পরে উপনামটি প্রসারিত হয়েছিল। বস্তুত, শেল আর যে স্মরণ myfuncকল myalias; এটা শুধু তাই জানে myfuncকল cat:

    my টাইপ মাইফাঙ্ক
    myfunc একটি ফাংশন
    মাইফাঙ্ক ()
    {
    বিড়াল মাইফাইল
    }
  2. … একটি ফাংশনে সংজ্ঞায়িত উপাধিগুলি সেই ফাংশনটি সম্পাদন না করা অবধি পাওয়া যায় না।

    cho প্রতিধ্বনি "দ্রুত ব্রাউন শিয়াল অলস কুকুরটির উপরে লাফিয়ে উঠেছে।" > মাইফাইল
     
    $ myfunc () {
    > ওরফে মিয়ালিয়াস = বিড়াল
    >}
     
    $ মিয়ালিয়াস মাইফিল
    -বাশ: মিয়ালিয়াস: কমান্ড পাওয়া যায় নি
     
    $ myfunc
     
    $ মিয়ালিয়াস মাইফিল
    দ্রুত ব্রাউন শিয়াল অলস কুকুরটির উপরে ঝাঁপিয়ে পড়ে।

    myaliasযতক্ষণ না ওরফে উপলব্ধ নয় myfuncফাংশন মৃত্যুদন্ড কার্যকর করা হয়েছে। (আমি বিশ্বাস করি যে উলেফটি সংজ্ঞায়িত করে এমন ফাংশনটি সংজ্ঞায়িত করলে এটি তার পক্ষে অদ্ভুত হবে না যা তার নাম সংজ্ঞায়িত করার পক্ষে যথেষ্ট ছিল।)


4
+1, ভাল উত্তর। এটির জন্য একটি গুরুত্বপূর্ণ "বাস্তবায়ন" হ'ল যদি কেউ কোনও স্ক্রিপ্টে ফাংশন এবং উপন্যাসগুলি সংজ্ঞায়িত করতে চায়, তবে ফাংশন সংজ্ঞাগুলির আগে পূর্ববর্তী সংজ্ঞাটি আরও ভালভাবে স্থাপন করুন! (স্পষ্টত, এখন, উত্তর দেওয়া হয়েছে, কিন্তু আমি এটি জানতাম না)।
অলিভিয়ার ডুলাক

ধন্যবাদ। আমি মনে করি অন্তর্নিহিত সমস্যাটি কোনও ফাংশনের সংজ্ঞা চালানো এবং একটি ফাংশন কল করার মধ্যে পার্থক্য। বিশেষত, কোনও ফাংশনটির সংজ্ঞা চালানোর সময় এবং যথাক্রমে ফাংশনটি কল করার সময় কোন শেল অপারেশন করা হয়? কোনও শেল অপারেশন রয়েছে যা কোনও ফাংশনের সংজ্ঞা চালানো এবং ফাংশন কল করার ক্ষেত্রেই সঞ্চালিত হয়, বা কোনও ফাংশনের সংজ্ঞা চালিয়ে ফাংশনটিকে শেল অপারেশনগুলির অ-ওভারল্যাপিং সেটটি সম্পাদন করে না?
টিম

ঠিক আছে, এটি গাড়ি তৈরি এবং গাড়ি চালানোর মধ্যে পার্থক্যের মতো like অথবা স্যান্ডউইচ কিনে স্যান্ডউইচ খাচ্ছেন। আমি আপনার অন্যান্য প্রশ্নের আরও বিস্তারিত উত্তর প্রদান করেছি
জি-ম্যান

ধন্যবাদ। বাশ ম্যানুয়াল এবং আপনার জবাব থেকে উদ্ধৃতিটি পুনরায় পড়ার পরে, আমি কোনও ফাংশন সম্পাদন করার অর্থ সম্পর্কে বিভ্রান্ত। এর অর্থ কী কোনও ফাংশনের সংজ্ঞা কার্যকর করা, বা কোনও ফাংশন কল করা? দেখুন unix.stackexchange.com/q/384209/674
টিম

1

আমি যখন উত্তরটি আমার স্নিপেটের নীচে চেষ্টা করি তখন প্রথম বাক্যে বর্ণিত উত্তরটি আমার প্রয়োজন.bashrc

alias ls='\ls -F --color=auto --show-control-chars'
alias ll='ls -ahl'
function lf_macro() {
    local CMD=${1:-ls} DIR=${2:-.};
    $CMD $(find $DIR -maxdepth 1 -type f);
}
function lf() { lf_macro ll "$1"; }
function lsf() { lf_macro ls "$1"; }     # list all file, no directories

পরে unalias -a; source ~/.bashrc, আমি মৃত্যুদন্ড কার্যকর করার চেষ্টা করি lfএবং lsf,

$ lf
-bash: ll: command not found

$ lsf
./file1 ./file2 ./script.sh ...     # no color, no control-chars

$ ls $(find -maxdepth 1 -type f)
./file1 ./file2 ./script.sh* ...

এটি স্পষ্টভাবে মনে হয় যে এলিয়াসগুলি ফাংশন সংজ্ঞাতে প্রসারিত হয়, কার্য সম্পাদন নয়, যেহেতু :

  • যখন আমি মৃত্যুদন্ড কার্যকর করি তখন lfত্রুটি -bash: ll: command not foundএবং
  • যখন আমি চালানো lsf, /usr/bin/lsব্যবহার করা হয়, না ওরফে ফর্ম, কোন রঙ হাইলাইট, এবং এক্সিকিউটেবল ফাইল পরে কোন নিয়ন্ত্রণ অক্ষর।
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.