আমি যখন 'টার্মিনালে একক উদ্ধৃতি প্রবেশ করি এটি অন্য কোনও মোডে যায় এবং কমান্ডগুলি কার্যকর হয় না। এই মোডটি কী এবং আমরা কখন এটি ব্যবহার করব?
root@sai:~# '
> ls
> '
ls
: command not found
root@sai:~#
')
আমি যখন 'টার্মিনালে একক উদ্ধৃতি প্রবেশ করি এটি অন্য কোনও মোডে যায় এবং কমান্ডগুলি কার্যকর হয় না। এই মোডটি কী এবং আমরা কখন এটি ব্যবহার করব?
root@sai:~# '
> ls
> '
ls
: command not found
root@sai:~#
')
উত্তর:
কার্যকরভাবে, শেলটি একটি সম্পূর্ণ কমান্ড / এক্সপ্রেশন জিজ্ঞাসা করে , এবং সেই কারণে PS2প্রম্পট স্ট্রিং প্রদর্শিত হচ্ছে ।
থেকে man bash:
প্ররোচনা
ইন্টারেক্টিভভাবে এক্সিকিউট করার সময়, কমান্ড পড়ার জন্য প্রস্তুত হলে ব্যাশ প্রাথমিক প্রম্পট PS1 এবং সেকেন্ডারি প্রম্পট পিএস 2 প্রদর্শন করে যখন কমান্ডটি সম্পূর্ণ করার জন্য আরও ইনপুট লাগবে।
এবং তার সামান্য আগে:
PS2 The value of this parameter is expanded as with PS1 and used as the secondary prompt string. The default is ``> ''.
সুতরাং, আপনি ডকুমেন্টেশন পড়া থেকে অনুমান করতে পারেন, শেলগুলির বিভিন্ন উদ্দেশ্যে একাধিক প্রম্পট রয়েছে। PS1প্রম্পট আপনার হয় root@sai:~#স্ট্রিং, যা স্বাভাবিকভাবে দেখায় যখন আপনি কমান্ড লিখুন। >হয় PS2প্রম্পট। সেখানে অন্যদের, অত্যধিক আছে: PS3জন্য selectকমান্ড ব্লক এবং PS4সঙ্গে ডিবাগ করার জন্য set -xকমান্ড। এই ক্ষেত্রে আমরা আরও আগ্রহী PS2।
শেল PS2প্রম্পট প্রদর্শন করতে পারে এমন অনেকগুলি উপায় রয়েছে (এবং যেখানে একটি নতুন লাইনে একটি কমান্ড সমাপ্ত করা প্রয়োজন হতে পারে)। আপনি here-docপুনঃনির্দেশ সম্পাদন করার সময় একই প্রম্পটটি ব্যবহার করা হয় (যেখানে আপনি উদাহরণস্বরূপ টার্মিনেটিং স্ট্রিংটি দেখেন তখন একটি কমান্ড সম্পূর্ণ হিসাবে বিবেচিত হয় EOF):
$ cat <<EOF
> line one
> line two
> EOF
line one
line two
প্রায়শই একটি দীর্ঘ কমান্ডের ধারাবাহিকতাটি \নতুন লাইন যুক্ত এবং তাত্ক্ষণিকভাবে (!) দ্বারা করা যেতে পারে , যা একই প্রম্পটটি প্রদর্শিত হতে পারে:
$ echo Hello\
> World
HelloWorld
$ echo 'Hello\
> World'
Hello\
World
পাইপ, লজিক অপারেটর বা বিশেষ কীওয়ার্ডগুলি যখন নতুন লাইনের আগে কমান্ড-লাইনে উপস্থিত হয়, সমস্ত চূড়ান্ত বিবৃতি প্রবেশ না করা পর্যন্ত কমান্ডটিও অসম্পূর্ণ হিসাবে বিবেচিত হয়:
$ echo Hello World |
> wc -l
1
$ echo Hello World &&
> echo "!"
Hello World
!
$ for i in $(seq 1 3); do
> echo "$i"
> done
1
2
3
$ if [ -f /etc/passwd ]
> then
> echo "YES"
> fi
YES
আপনার বিশেষ ক্ষেত্রে, একটি একক উদ্ধৃতি একক উদ্ধৃতিগুলির মধ্যে যা আছে তার আক্ষরিক ব্যাখ্যা বোঝায়। সুতরাং, জান্না উল্লেখ করেছেন, আপনি একটি কমান্ড লিখছেন যা নিউলাইন + ls+ নিউলাইন নিয়ে গঠিত । এই জাতীয় নির্বাহযোগ্য ফাইলের নামটি পাওয়া যায় না (এবং সাধারণত কমান্ড ফাইলের নামগুলিতে কেবলমাত্র বর্ণানুক্রমিক অক্ষর, ততোধিক আন্ডারস্কোর, ড্যাশ এবং বিন্দুর সমন্বয়ে থাকতে হবে)। যদিও এর মধ্যে বিশেষ অক্ষর রয়েছে এমন ফাইলের নাম রাখা সম্ভব হলেও এটি সর্বদা এড়ানো যায়।
দ্রষ্টব্য : আপনার উদাহরণে যেমন দেখানো হয়েছে তেমন আচরণ বোর্ন-জাতীয় শেলগুলির সাথে সুনির্দিষ্ট bash, dash(উবুন্টুতে এটির সাথে সমান সংযুক্ত রয়েছে /bin/sh) ksh, এবং mksh। cshএবং এর ডেরাইভেটিভগুলি এ জাতীয় আচরণ করে না:
$ tcsh
eagle:~> '
Unmatched '.
eagle:~> csh
% '
Unmatched '.
%
তবে, ইন্টারেক্টিভ মোডে, cshএখনও আরও ইনপুট প্রয়োজন হলে প্রম্পট 2? হিসাবে বাড়িয়ে তুলবে :
$ csh
% foreach n ( 1 2 3 )
? echo $n
? end
1
2
3
What's the difference between <<, <<< and < < in bash?অফলাইন / ভুল।
শেলটি সবেমাত্র বন্ধের উদ্ধৃতিটির জন্য অপেক্ষা করছে। আপনি এটি প্রবেশ করার পরে এটি সাধারণত যা হয় ঠিক তেমনটি করে এবং প্রবেশ করা আদেশটি কার্যকর করার চেষ্টা করে।
উদ্ধৃতিগুলি শেলটিকে বিশেষ অক্ষরের ব্যাখ্যা না দেয়, যার অর্থ প্রশস্ততা সম্পন্ন হয় না। একক উদ্ধৃতি সম্পূর্ণ বিশেষ অক্ষরের সমস্ত ব্যাখ্যা দমন করে। সাধারণত একটি নিউলাইন কমান্ড পৃথক করে, তবে আপনি এখানে নিউলাইনগুলি কমান্ডের অংশ হিসাবে অন্তর্ভুক্ত করেছেন।
যেহেতু এরকম কোনও আদেশ নেই <newline>ls<newline>, এটি পাওয়া যায় না।