যদি আমি টাইপ করি
::
বাশ শেলের মধ্যে, আমি পেয়েছি:
-bash: ::: command not found
তবে, কেবলমাত্র একটির :
ফলাফল হয় না। কেন?
যদি আমি টাইপ করি
::
বাশ শেলের মধ্যে, আমি পেয়েছি:
-bash: ::: command not found
তবে, কেবলমাত্র একটির :
ফলাফল হয় না। কেন?
উত্তর:
:
শেল বিল্ট-ইন বনাম অবর্তমান::
:
শেল বিল্ট-ইন কমান্ড বিদ্যমান (নোট মধ্যে পার্থক্য বহিরাগত এবং বিল্ট-ইন কমান্ড ) যা কিছুই না; এটি ঠিক true
কমান্ডের মতো সাফল্য ফিরিয়ে দেয় । :
বিল্ট-ইন মান এবং POSIX মান দ্বারা সংজ্ঞায়িত , যেখানে এটি আরো "নাল ইউটিলিটি" নামে পরিচিত হয়। এটি প্রায়শই পরীক্ষার জন্য বা হিসাবে হিসাবে অসীম লুপগুলি চালানোর জন্য ব্যবহৃত হয়while : ; do ...;done
bash-4.3$ type :
: is a shell builtin
তবে, ::
- দুটি কোলন অক্ষর এক সাথে - শেলের একটি "শব্দ" হিসাবে ব্যাখ্যা করা হয়, এবং এটি ব্যবহারকারীকে প্রবেশ করানো একটি আদেশ হিসাবে ধরে নেয়। শেলটি বিল্ট-ইনগুলি পরীক্ষা করার প্রক্রিয়াটির মধ্য দিয়ে যাবে, তারপরে PATH
সেই কমান্ডটির অস্তিত্বের জন্য ভেরিয়েবলের কোনও ডিরেক্টরি । তবে সেখানে অন্তর্নির্মিত ::
বা বাহ্যিক আদেশও নেই ::
। সুতরাং, যে একটি ত্রুটি উত্পাদন করে।
ভাল, একটি ত্রুটির জন্য একটি সাধারণ বিন্যাসটি কী?
<shell>: <command user typed>: error message
সুতরাং, আপনি যা দেখছেন তা 3 টি কলোনের নয় তবে আপনি যা টাইপ করেছেন তা স্ট্যান্ডার্ড ত্রুটি বিন্যাসে আটকে দিয়েছে।
এটিও নোট করুন, এটি :
কমান্ড-লাইন আর্গুমেন্ট নিতে পারে, অর্থাৎ এটি করা আইনী:
: :
এই ক্ষেত্রে, শেলটি দুটি "শব্দ" হিসাবে বিবেচনা করবে, যার একটি হ'ল আদেশ এবং অন্যটি অবস্থানগত পরামিতি। যে কোন ত্রুটি উত্পাদন করবে! ( :
অবস্থানগত পরামিতিগুলির ব্যবহার সম্পর্কে historicalতিহাসিক নোট (পরে এই উত্তরেও দেখুন) )
নোট করুন যে বিন্যাসটি বিভিন্ন শেলের মধ্যেও পরিবর্তিত হতে পারে। জন্য bash
, ksh
এবং mksh
আচরণ সামঞ্জস্যপূর্ণ। উদাহরণস্বরূপ, উবুন্টুর ডিফল্ট /bin/sh
শেল (যা আসলে /bin/dash
):
$ dash
$ ::
dash: 1: ::: not found
যেখানে 1 হ'ল কমান্ড নম্বর (স্ক্রিপ্টের লাইন নম্বর সমতুল্য)।
csh
বিপরীতে কোনও ত্রুটি বার্তা উত্পাদন করে না:
$ csh
% ::
%
আসলে আপনি যদি চালনা strace -o csh.trace csh -c ::
করেন তবে csh.trace
ফাইলের ট্রেস আউটপুট প্রকাশ করে যা csh
প্রস্থান স্থিতি 0 (কোনও ত্রুটি নেই) দিয়ে প্রস্থান করে। তবে tcsh
ত্রুটিটিকে আউটপুট দেয় (যদিও এর নাম আউটপুট না দিয়ে):
$ tcsh
localhost:~> ::
::: Command not found.
সাধারণভাবে, ত্রুটি বার্তায় প্রথম আইটেমটি নির্বাহকারী প্রক্রিয়া বা ফাংশন হওয়া উচিত (আপনার শেলটি কার্যকর করার চেষ্টা করে ::
, সুতরাং ত্রুটি বার্তাটি শেল থেকে আসে)। উদাহরণস্বরূপ, এখানে কার্যনির্বাহী প্রক্রিয়াটি হ'ল stat
:
$ stat noexist
stat: cannot stat 'noexist': No such file or directory
প্রকৃতপক্ষে, পসিক্স পারের () ফাংশনটি সংজ্ঞায়িত করে , যা ডকুমেন্টেশন অনুসারে স্ট্রিং আর্গুমেন্ট গ্রহণ করে, পরে কোলনের পরে ত্রুটি বার্তা আউটপুট করে এবং পরে নিউলাইন করে। উদ্ধৃতি:
পারের () ফাংশনটি একটি ভাষা-নির্ভর ত্রুটি বার্তায় প্রতীকের মাধ্যমে অ্যাক্সেস করা ত্রুটি নম্বরটি মানচিত্র তৈরি করবে, যা নিম্নরূপে স্ট্যান্ডার্ড ত্রুটি প্রবাহে লেখা হবে:
প্রথম (যদি গুলি একটি নাল পয়েন্টার না হয় এবং s দ্বারা নির্দেশিত অক্ষর নাল বাইট নয়), স্ট্রিংটি এস দ্বারা নির্দেশিত একটি কোলন এবং <স্পেস> দ্বারা অনুসরণ করা হয়।
তারপরে একটি ত্রুটি বার্তার স্ট্রিং এর পরে <নিউ নিউলাইন>।
এবং perror()
প্রযুক্তিগতভাবে স্ট্রিং আর্গুমেন্ট যে কোনও কিছু হতে পারে, তবে অবশ্যই স্পষ্টতার জন্য এটি সাধারণত ফাংশনের নাম বা argv[0]
।
বিপরীতে গনুহ কার্যকারিতা ও ত্রুটি পরিচালনার জন্য ভেরিয়েবল নিজস্ব সেট আছে , যা একটি প্রোগ্রামার সাথে ব্যবহার করতে পারেন fprintf()
থেকে stderr
স্ট্রীম। লিঙ্কযুক্ত পৃষ্ঠার উদাহরণগুলির মধ্যে একটি হিসাবে, এরকম কিছু করা যেতে পারে:
fprintf (stderr, "%s: Couldn't open file %s; %s\n",
program_invocation_short_name, name, strerror (errno));
পুরানো ইউনিক্স এবং থম্পসন শেলটিতে স্টেটমেন্ট:
সহ ব্যবহার করা হত (যা ব্যবহারকারী এই থ্রেডে পার্ডেরাবো নামের শেলটি অন্তর্নির্মিত ছিল না)। ম্যানুয়াল থেকে উদ্ধৃতি:goto
সম্পূর্ণ কমান্ড ফাইলটি একটি দিয়ে শুরু হওয়া একটি লাইনের জন্য অনুসন্ধান করা হয়: প্রথম অ-ফাঁকা অক্ষর হিসাবে, তারপরে এক বা একাধিক ফাঁকা স্থান এবং তারপরে লেবেল। যদি এই জাতীয় কোনও লাইন পাওয়া যায়, তবে লোনটি লেবেলের অফসেট কমান্ড-ফাইলটি স্থাপন করে প্রস্থান করার পরে। এটি শেলটি লেবেলযুক্ত লাইনে স্থানান্তরিত করে।
সুতরাং আপনি অসীম লুপ স্ক্রিপ্ট তৈরি করতে এরকম কিছু করতে পারেন:
: repeat
echo "Hello World"
goto repeat
command.com
এবং উইন্ডোজ 'এর cmd.exe
একইরকম তবে বিপরীত পরিস্থিতি রয়েছে: :
স্পষ্টতই একটি গোটো লেবেল (কমান্ড নয়) এবং প্রায়শই একটি মন্তব্য চরিত্র হিসাবে পুনঃপ্রকাশ করা হয় (যেমন :: This is a comment
)।
শেষ কলোনটি ডিফল্ট "পাওয়া যায় না" বার্তার একমাত্র অংশ:
$ x
x: command not found
$ ::
::: command not found
একক কোলন কিছুই না উত্পাদনের কারণটি :
হ'ল একটি বৈধ কমান্ড - যদিও এটি কিছুই করে না (রিটার্ন ব্যতীত TRUE
)। এর SHELL BUILTIN COMMANDS
বিভাগ থেকে man bash
:
: [arguments]
No effect; the command does nothing beyond expanding arguments
and performing any specified redirections. A zero exit code is
returned.
আপনি কখনও কখনও এটি নির্মাণে দেখতে পাবেন
while :
do
something
done
উদাহরণস্বরূপ দেখুন কোলন বিল্টিন কী উদ্দেশ্যে কাজ করে?
$ ::
bash: ::: command not found
$ kkkk
bash: kkkk: command not found
3 য় হ'ল ফর্ম্যাট করা থেকে একটি স্পেসার
বাশ :
এ একটি খালি লাইন শূন্য নির্দেশ