ইয়াশ শেলের প্রিন্টফ অন্তর্নির্মিত কমান্ড কিনা তা নিয়ে সামান্য বিভ্রান্ত


14

yashশেল একটি হয়েছে printfবিল্ট-ইন, তার ম্যানুয়াল অনুযায়ী

যাইহোক, আমি এটি yashডিফল্ট কনফিগারেশন সহ একটি শেল দেখতে পাচ্ছি :

kk@eeyore ~ $ command -v printf
/usr/bin/printf
kk@eeyore ~ $ type printf
printf: a regular built-in at /usr/bin/printf

printfএই শেলটিতে কি অন্তর্নির্মিত আছে নাকি? ফলাফলটি বেশ কয়েকটি অন্যান্য অন্তর্নির্মিত ইউটিলিটিগুলির জন্য সমান যা বাহ্যিক কমান্ড হিসাবেও উপলব্ধ।

একটি তুলনা হয় যেমন pdksh( kshOpenBSD, যেখানে উপর printfহয় না একটি বিল্ট-ইন):

$ command -v printf
/usr/bin/printf
$ type printf
printf is /usr/bin/printf

আর এ bash(যেখানে printf হয় একটি বিল্ট-ইন):

$ command -v printf
printf
$ type printf
printf is a shell builtin

1
এটি একটি অন্তর্নির্মিত - একটি নিয়মিত , বিশেষ অন্তর্নির্মিত নয় । যদি আপনি বিশেষ এবং নিয়মিত বিল্ট-ইনগুলির মধ্যে পার্থক্য সম্পর্কে বিভ্রান্ত হন , বা স্ট্যান্ডার্ডের দ্বারা নির্ধারিত আচরণের ( কমান্ড অনুসন্ধান এবং এক্সিকিউশনটি দেখুন 1.Eia) - যার জন্য প্রয়োজন PATHএকটি নিয়মিত অন্তর্নির্মিত বাইনারি থাকা উচিত মৃত্যুদন্ড কার্যকর করা - তারপরে দয়া করে সে সম্পর্কে আপনার প্রশ্ন করুন।
মশবী

1
@ মোসভি এটি আমার কাছে যে স্ট্যান্ডার্ডটির অজানা ছিল তার একটি বিশদ ছিল। আপনি যদি এটিকে উত্তরে রূপান্তর করতে চান তবে আমি খুশি হব। আমি মনে করি না যে এটির একটি যথাযথ উত্তর হওয়ার জন্য আমাকে প্রশ্নটি আপডেট করার দরকার হবে, কারণ আমি এই বিশেষ বিবরণ সম্পর্কে অজ্ঞাত ছিলাম। অথবা আমি নিজেই পরে এটি লিখব।
কুসালানন্দ

উত্তর:


14

yashশেল করে আছে, এবং ব্যবহার, একটি বিল্ট-ইন সংস্করণ আছে printf(এবং অন্যান্য ইউটিলিটি)। এটি কেবলমাত্র পেডিক্যালি পসিক্সের সাথে সামঞ্জস্যপূর্ণ হতে পারে যেমন এটি আদেশ command -vএবং typeআদেশের ফলাফলকে সূত্র দেয় ।

মশবির মন্তব্য হিসাবে, পসিক্স স্ট্যান্ডার্ডের প্রয়োজন একটি নিয়মিত অন্তর্নির্মিত কমান্ডটি বহির্মুখী কমান্ড হিসাবে কমান্ডের $PATHঅন্তর্নির্মিত সংস্করণটি সম্পাদন করার জন্য উপলব্ধ।

এটি স্ট্যান্ডার্ড থেকে প্রাসঙ্গিক পাঠ্য :

কমান্ড অনুসন্ধান এবং কার্যকর

যদি একটি সাধারণ কমান্ড একটি আদেশের নাম এবং যুক্তিগুলির একটি listচ্ছিক তালিকার ফলাফল দেয় তবে নিম্নলিখিত ক্রিয়া সম্পাদন করা হবে:

  1. যদি কমান্ডের নামটিতে কোনও <স্ল্যাশ> অক্ষর না থাকে তবে নিম্নলিখিত ক্রমের প্রথম সফল পদক্ষেপটি উপস্থিত হবে:

    • ক। কমান্ডের নামটি যদি একটি বিশেষ অন্তর্নির্মিত ইউটিলিটির নামের সাথে মেলে, তবে সেই বিশেষ অন্তর্নির্মিত ইউটিলিটিটি ডাকা হবে।

      [...]

    • ঙ। অন্যথায়, কমান্ডটি XBD এনভায়রনমেন্ট ভেরিয়েবলগুলিতে বর্ণিত PATH এনভায়রনমেন্ট ভেরিয়েবল ব্যবহার করার জন্য অনুসন্ধান করা হবে:
      • আমি। যদি অনুসন্ধান সফল হয়:
        • ক। যদি সিস্টেমটি ইউটিলিটিটি নিয়মিত অন্তর্নির্মিত হিসাবে বা শেল ফাংশন হিসাবে প্রয়োগ করে থাকে তবে এটি পথ সন্ধানে এই মুহুর্তে আহ্বান জানানো হবে।
        • খ। অন্যথায়, শেলটি পৃথক ইউটিলিটি পরিবেশে ইউটিলিটি চালায় [...]
          [...]
      • আ। যদি অনুসন্ধান ব্যর্থ হয়, কমান্ডটি 127 এর একটি প্রস্থান স্থিতি দিয়ে ব্যর্থ হবে এবং শেলটি একটি ত্রুটি বার্তা লিখবে।
  2. যদি কমান্ডের নামটিতে কমপক্ষে একটি <স্ল্যাশ> থাকে, [...]

এর অর্থ এই যে আউটপুট command -v printfঅর্থ printfকমান্ড ছিল সন্ধানের পাথ পাওয়া, যখন আউটপুট type printfএই বলেছেন যে কমান্ড একটি নিয়মিত বিল্ট-ইন রয়েছে।

যেহেতু printfকমান্ডটি অনুসন্ধানের পথে পাওয়া গিয়েছিল এবং যেহেতু এটি শেলটিতে নিয়মিত অন্তর্নির্মিত yashহয় তাই কমান্ডটির অন্তর্নির্মিত সংস্করণটিকে কল করবে । যদি printfহয় না পথ খুঁজে পাওয়া, এবং যদি yashশেল POSIX-ly থেকে সঠিক মোডে চলমান ছিল, একটি ত্রুটি পরিবর্তে উত্পন্ন করা হত।

yashনিজেকে খুব পসিক্স কমপ্লায়েন্ট শেল হিসাবে গর্বিত করে এবং পসিএক্স কী সম্পর্কে বলে তাcommand -v যদি আমরা লক্ষ্য করি তবে এটিও সত্য :

-v

মানক আউটপুটে একটি স্ট্রিং, যাতে পথনাম অথবা কমান্ড যে শেল দ্বারা ব্যবহৃত হবে ইঙ্গিত, বর্তমান শেল সঞ্চালনের পরিবেশে লিখুন (দেখুন শেল এক্সেকিউশন এনভায়রনমেন্টের , ডাকা) command_name, কিন্তু আহবান করবেন না command_name

  • উপযোগিতা সমূহ, নিয়মিত বিল্ট-ইন ইউটিলিটি , command_namesএকটি সহ <slash>অক্ষর, এবং কোনো বাস্তবায়ন-সংজ্ঞায়িত ফাংশন যে ব্যবহার পাওয়া যায় PATHপরিবর্তনশীল (যেমন বর্ণিত কমান্ড অনুসন্ধান এবং এক্সিকিউশন ), পরম pathnames হিসেবে লেখা হইবে

3
কেউ কি জানেন যে বিল্ট-ইন কমান্ড চালানোর আগে পসিক্সের বাইরের কমান্ডের উপস্থিতি থাকা দরকার কেন?
স্টুড

@ স্টুডোগ সম্ভবত আপনি এই উত্তর এবং / অথবা প্রশ্নটি উল্লেখ করে একটি পৃথক নতুন প্রশ্ন হিসাবে জিজ্ঞাসা করতে চাইতে পারেন।
কুসালানন্দ

1
সম্পন্ন হয়েছে: unix.stackexchange.com/questions/496341/…
স্টুড

6

ওয়াটানাবে শেলের তিন ধরণের বিল্ট-ইন রয়েছে, যা এর ম্যানুয়ালটিতে বিশদভাবে বর্ণনা করা হয়েছে। সমস্ত অন্তর্নির্মিত কমান্ডগুলি এখানে তালিকাভুক্তও রয়েছে, তবে একটিকে অনুমান করতে হবে যে কোনও আদেশ "স্পেশাল" বা "আধা-বিশেষ" বলে নোটের অনুপস্থিতি থেকে একটি "নিয়মিত" অন্তর্নির্মিত কমান্ড is বিল্ট-ইন। নিয়মিত বিল্ট-ইনগুলি চিহ্নযুক্ত।

printfহ'ল বিল্ট-ইন এই জাতীয় একটি "নিয়মিত"। নেটিভ মোডে এটি সর্বদা আহ্বান জানানো হয়, সে নামে কোনও বাহ্যিক আদেশ পাওয়া যায় কিনা তা নির্বিশেষে।

$ পাথ =, / usr / বিন 
$ printf,
printf: এই কমান্ডটির অপারেন্ড দরকার requires
$ Printf টাইপ করুন
প্রিন্টএফ: / ইউএসআর / বিন / প্রিন্টফ এ নিয়মিত অন্তর্নির্মিত
$
$ পাথ = / 
$ printf,
printf: এই কমান্ডটির অপারেন্ড দরকার requires
$ Printf টাইপ করুন
প্রিন্টফ: একটি নিয়মিত অন্তর্নির্মিত (AT PATH তে পাওয়া যায় না)
$

যখন posixly-correctশেল অপশনটি সেট করা হয় এটি কেবল একটি বিল্ট-ইন থাকে যদি বাহ্যিক কমান্ডটি পাওয়া যায় তবে PATH

$ সেট --posixly- সঠিক
$
$ পাথ =, / usr / বিন 
$ printf,
printf: এই কমান্ডটির অপারেন্ড দরকার requires
$
$ পাথ = / 
$ printf,
যশ: এই জাতীয় কোনও আদেশ 'প্রিন্টফ' নেই
$

এটি প্রকৃতপক্ষে একক ইউনিক্স স্পেসিফিকেশন যা বলে তার সাথে সামঞ্জস্যপূর্ণ এবং এটি কমপক্ষে 1997 সাল থেকে বলেছে।

এটি জেড শেল, 93 কর্ন শেল, বোর্ন অ্যাগেইন শেল এবং দেবিয়ান অ্যালকুইস্ট শেল থেকে পৃথক, যার কোনওটিই নিয়মিত বিল্ট-ইনগুলির জন্য এই জাতীয় আচরণ বাস্তবায়ন বা নথিভুক্ত করে না। জেড শেল, উদাহরণস্বরূপ, নিয়মিত অন্তর্নির্মিত দলিলগুলি সর্বদা পাওয়া যায়, অনুসন্ধানের ধাপের আগেPATH । ডেবিয়ান অ্যালকুইস্ট শেলও তাই করে। এই শেলগুলি সমস্ত কি করে, এমনকি যদি shতাদের টার্ন অন-পসিক্স বিকল্পগুলির সাথে অনুরোধ করা হয়।

% / বিন / এক্সিকিউটিএএইচ zsh -c "PATH = /; প্রিন্টফ; প্রিন্টফ"
প্রিন্টফ হ'ল শেল বিল্টিন
zsh: printf: 1: পর্যাপ্ত আর্গুমেন্ট নেই
% / বিন / এক্সিকিউটিএএইচ ksh93 -c "PATH = /; প্রিন্টফ টাইপ করুন; প্রিন্টফ"
প্রিন্টফ হ'ল শেল বিল্টিন
ব্যবহার: প্রিন্টফ [বিকল্পসমূহ] ফর্ম্যাট [স্ট্রিং ...]
% / বিন / এক্সিকিউটিএএ শ বাশ --posix -c "PATH = / টাইপ প্রিন্টফ; প্রিন্টফ"
প্রিন্টফ হ'ল শেল বিল্টিন
printf: ব্যবহার: printf [-v var] ফর্ম্যাট [আর্গুমেন্ট]
% / বিন / এক্সিকিউটিএ ড্যাশ -c "PATH = /; প্রিন্টফ; প্রিন্টফ"
প্রিন্টফ হ'ল শেল বিল্টিন
sh: 1: প্রিন্টফ: ব্যবহার: প্রিন্টফ ফর্ম্যাট [আরগ ...]
% 

যাইহোক, printfএটি যখন না থাকে তখন দৌড়ানো নয় PATHপিডি কর্ন শেল, হেরলুম বোর্ন শেল এবং মিরবিএসডি কর্ন শেলের আচরণ; কারণ তাদের printfপ্রথমে বিল্ট-ইন নেই। ☺

% / বিন / এক্সিকিউটিএ-শ `কমান্ড -v ksh` -c" PATH = /; প্রিন্টফ টাইপ করুন; প্রিন্টফ "
প্রিন্টফ পাওয়া যায়নি
sh: printf: পাওয়া যায় নি
% / বিন / এক্সিকিউটিএ-শ `কমান্ড -v oksh` -c" PATH = /; প্রিন্টফ; প্রিন্টফ টাইপ করুন "
প্রিন্টফ পাওয়া যায়নি
sh: printf: পাওয়া যায় নি
% / বিন / এক্সিকিউটিএ-শ `কমান্ড -v jsh` -c" PATH = /; প্রিন্টফ; প্রিন্টফ টাইপ করুন "
প্রিন্টফ পাওয়া যায়নি
sh: printf: পাওয়া যায় নি
% / বিন / এক্সিকিউটিএ = এমএক্স-সি "PATH = /; প্রিন্টফ; প্রিন্টফ" টাইপ করুন
প্রিন্টফ পাওয়া যায়নি
sh: printf: পাওয়া যায় নি
% ksh -c "টাইপ প্রিন্টফ; প্রিন্টফ"
প্রিন্টফ / ইউএসআর / বিন / প্রিন্টফের জন্য একটি ট্র্যাক করা উলাম
ব্যবহার: প্রিন্টফ ফর্ম্যাট [যুক্তি ...]
% oksh -c "টাইপ প্রিন্টফ; প্রিন্টফ"
প্রিন্টফ / ইউএসআর / বিন / প্রিন্টফের জন্য একটি ট্র্যাক করা উলাম
ব্যবহার: প্রিন্টফ ফর্ম্যাট [যুক্তি ...]
% jsh -c "টাইপ প্রিন্টফ; প্রিন্টফ"
প্রিন্টফ হ্যাশ করা হয়েছে (/ ইউএসআর / বিন / প্রিন্টফ)
ব্যবহার: প্রিন্টফ ফর্ম্যাট [যুক্তি ...]
% mksh -c "টাইপ প্রিন্টফ; প্রিন্টফ"
প্রিন্টফ / ইউএসআর / বিন / প্রিন্টফের জন্য একটি ট্র্যাক করা উলাম
ব্যবহার: প্রিন্টফ ফর্ম্যাট [যুক্তি ...]
$

ভাল! নিশ্চিত করার জন্য এবং আমার জ্ঞানে শেল-নির্দিষ্ট বিট যুক্ত করার জন্য ধন্যবাদ! আমি এই শেলটি আরও ইতিমধ্যে পছন্দ করি।
কুসালানন্দ

-1

শব্দটির উন্নতি করা যেতে পারে।

শেলটি পিক্সিক্স মোডে থাকলে set --posixly-correct:

PATH এ অস্তিত্ব নেই এমন নিয়মিত বিল্ট-ইনগুলির জন্য এটি মুদ্রিত হয়:

pushd: a regular built-in (not found in $PATH)

যা একটি স্পষ্ট বর্ণন: এটি একটি অন্তর্নির্মিত তবে PATH- তে একই নামের সাথে কার্যকর করা যায় না।

তবে, নিয়মিত বিল্ট-ইনগুলির জন্য যা নাম PATH তেও বিদ্যমান, এটি মুদ্রিত:

echo: a regular built-in at /bin/echo

যা, বোঝা যাচ্ছে যে / বিন / প্রতিধ্বনিতে নির্বাহযোগ্য হবে (যা হবে না)। আমি প্রস্তাব দিচ্ছি যে এতে থেকে পরিবর্তন atকরুন also found in PATH at:

echo: a regular built-in also found in PATH at /bin/echo

একটি ভাল বিবরণ করতে হবে। হতে পারে যে বন্ধনীতে (অন্যান্য উত্তর হিসাবে যেমন) এটি আরও ভাল করতে পারে los


POSIX মোডে, কোন নিয়মিত builtin কাজ করবে যদি না এটা হয় এছাড়াও পাথ খুঁজে পাওয়া যায়নি।

তবে, উভয়ই (পসিআইএক্স) বিশেষ:

break colon continue dot eval exec exit export
readonly return set shift times trap unset

এবং যশের অর্ধ-বিশেষ (পসিক্সের জন্য বিশেষ নয়):

alias bg cd command false fc fg getopts jobs
kill pwd read true umask unalias wait

বিল্টিনগুলি এখনও কাজ করে।

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