কমান্ড হিসাবে দুটি কলনের জন্য ত্রুটি বার্তাটি (: :) বাশ-এ তিনটি কলোন রয়েছে তবে একটি একক কোলন আউটপুট দেয় না কেন?


27

যদি আমি টাইপ করি

::

বাশ শেলের মধ্যে, আমি পেয়েছি:

-bash: ::: command not found

তবে, কেবলমাত্র একটির :ফলাফল হয় না। কেন?


মন্তব্যগুলি বর্ধিত আলোচনার জন্য নয়; এই কথোপকথন চ্যাটে সরানো হয়েছে ।
থমাস ওয়ার্ড

এটি কীভাবে উবুন্টুর সাথে সম্পর্কিত?
NerdOfCode

@ নেরডোফকোড একইভাবে এইভাবে আছেন? meta.askubuntu.com/q/17076/158442
muru

উত্তর:


40

:শেল বিল্ট-ইন বনাম অবর্তমান::

: শেল বিল্ট-ইন কমান্ড বিদ্যমান (নোট মধ্যে পার্থক্য বহিরাগত এবং বিল্ট-ইন কমান্ড ) যা কিছুই না; এটি ঠিক 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

"3 কলাম" এর জন্য "3 কলাম" টাইপো
বার্মার

1
ডস command.comএবং উইন্ডোজ 'এর cmd.exeএকইরকম তবে বিপরীত পরিস্থিতি রয়েছে: :স্পষ্টতই একটি গোটো লেবেল (কমান্ড নয়) এবং প্রায়শই একটি মন্তব্য চরিত্র হিসাবে পুনঃপ্রকাশ করা হয় (যেমন :: This is a comment)।
গ্রাভিটি

54

শেষ কলোনটি ডিফল্ট "পাওয়া যায় না" বার্তার একমাত্র অংশ:

$ 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

উদাহরণস্বরূপ দেখুন কোলন বিল্টিন কী উদ্দেশ্যে কাজ করে?


হ্যাঁ এটিই সর্বাধিক বিস্তৃত মন্তব্য .. আমার চেয়ে অনেক বেশি সুস্পষ্ট মন্তব্য .. আরও ভালভাবে ব্যাখ্যা করা হয়েছে: ডি
জন

8

অন্য যে কোনও অস্তিত্বহীন কমান্ড ব্যবহার করে দেখুন এবং আপনি দেখতে পাবেন যে :ইংরেজী ভাষায় এটি তার সাধারণ উদ্দেশ্যে কাজ করে:

$ ---
---: command not found

6

যুক্ত কোলন নিজেই ত্রুটি বার্তার অংশ। যদি এক ধরণের cd owফলাফল হয় bash: cd: ow: No such file or directory, যা দেখায় যে ত্রুটিটি অতিরিক্ত কোলনে রাখছে: No such file or directory


6
$ ::
bash: ::: command not found
$ kkkk
bash: kkkk: command not found

3 য় হ'ল ফর্ম্যাট করা থেকে একটি স্পেসার

বাশ :এ একটি খালি লাইন শূন্য নির্দেশ


4

আপনি 3 টি কলোন পান কারণ ত্রুটি বিন্যাসে একটি কোলন রয়েছে:

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