কমান্ডগুলিতে `(ব্যাককোট / ব্যাকটিক) এর অর্থ কী?


159

আমি নিম্নলিখিত আদেশটি জুড়ে এসেছি:

sudo chown `id -u` /somedir

এবং আমি অবাক: `চিহ্নটির অর্থ কী the আমি উদাহরণস্বরূপ লক্ষ্য করেছি যে উপরের কমান্ডটি ভালভাবে কাজ করার সময় নীচের একটিটি এটি করে না:

sudo chown 'id -u' /somedir

উত্তর:


199

এই হল ব্যাকটিকব্যাকটিক কোনও উদ্ধৃতি চিহ্ন নয়। এর খুব বিশেষ অর্থ রয়েছে। আপনি ব্যাকটিক্সের মধ্যে যা টাইপ করেন তা প্রধান কমান্ডের আগে শেল দ্বারা মূল্যায়ন (সম্পাদিত) হয় (যেমন chownআপনার উদাহরণগুলিতে), এবং সেই এক্সিকিউশনটির আউটপুট সেই কমান্ড দ্বারা ব্যবহৃত হয়, ঠিক যেমন আপনি সেই জায়গায় আউটপুট টাইপ করতে চান কমান্ড লাইন

তাতে কি

sudo chown `id -u` /somedir

কার্যকরভাবে রান ( আপনার ব্যবহারকারী আইডি উপর নির্ভর করে ) হয়:

sudo chown 1000 /somedir
  \    \     \     \
   \    \     \     `-- the second argument to "chown" (target directory)
    \    \     `-- your user ID, which is the output of "id -u" command
     \    `-- "chown" command (change ownership of file/directory)
      `-- the "run as root" command; everything after this is run with root privileges

কেন অনেক পরিস্থিতিতে ব্যাকটিক্স ব্যবহার করা ভাল ধারণা নয় তা জানতে এই প্রশ্নটি একবার দেখুন ।

বিটিডব্লু, আপনি যদি কখনও আক্ষরিকভাবে ব্যাকটিক ব্যবহার করতে চান, উদাহরণস্বরূপ স্ট্রিংয়ে, আপনি এটির \আগে একটি ব্যাকস্ল্যাশ রেখে ) এটি থেকে বাঁচতে পারেন ।


36
এটি ব্যাকটিক্সকে বেশ ভালভাবে ব্যাখ্যা করে, তবে $(your expression)আপনাকে একইভাবে কাজ করার আরও ভাল উপায় হ'ল $()বাসা বাঁধার জন্য। উদাহরণস্বরূপ: cd $(dirname $(type -P touch))ধারণকারী ডিরেক্টরির মধ্যে ইচ্ছার সিডি কোনটা touchকমান্ড
খাজা মিনহাজউদ্দীন

11
@ খাজা মিনহাজউদ্দিন আপনি বাসা বাঁধার বিষয়ে নিশ্চয়ই ঠিক বলেছেন - উপরে উল্লিখিত প্রশ্নটি এটিকে বিশদভাবে আচ্ছাদন করে। তবে যদিও আমি মনে করি $()বেশিরভাগ পরিস্থিতিতে এটি ব্যবহার করা ভাল অনুশীলন , এটি ব্যাকটিক্সকে আরও খারাপ জিনিস করে না । ব্যবহারিক উদ্দেশ্যে, একজনকে স্বীকার করতে হবে যে তারা কমান্ড লাইনে টাইপ করতে অনেক দ্রুত (কমপক্ষে 5 টির তুলনায় 2 কীস্ট্রোক সহ Shift)।
rozcietrzewiacz

2
@rozcietrzewiacz আপনার উত্তরটি সম্ভবত বেশিরভাগ কীবোর্ডের জন্য সত্য তবে কমপক্ষে একটি ফরাসী কীবোর্ডের $( )চেয়ে টাইপ করা অবশ্যই সহজ ` `
jlliagre

1
@ খাজা মিনহাজউদ্দিন আপনি ব্যাকটিক্সের বাসা বেঁধতে পারেন তবে আপনার দ্বিতীয় স্তরের ব্যাকটিকগুলি থেকে বাঁচতে হবে, এবং ২ য় স্তরের বাসা বাঁধতে আপনার জন্য 3 ব্যাকটিকস, তৃতীয় স্তরের নেস্টিং 5 ব্যাকটিকস, চতুর্থ স্তরের 7, এবং সি প্রয়োজন।
জাস্টিন সিবি

66

আমি এখানে আরও কয়েকটি পয়েন্ট যুক্ত করতে চাই।

ব্যাকটিককে `…`আসলে কমান্ড সাবস্টিটিউশন বলা হয় । কমান্ড প্রতিস্থাপনের উদ্দেশ্য হ'ল ব্যাকটিকের ভিতরে রাখা কমান্ডটি মূল্যায়ন করা এবং প্রকৃত আদেশের যুক্তি হিসাবে তার ফলাফল সরবরাহ করা।

কমান্ড প্রতিস্থাপনটি দুটি উপায়ে করা যেতে পারে একটি ব্যবহার করছে $(…)এবং অন্যটি `…`। উভয়ই একই রকম কাজ করে তবে $(…)ফর্মটি আধুনিক পদ্ধতি এবং এর আরও স্পষ্টতা এবং পাঠযোগ্যতা রয়েছে।

এবং তাই

sudo chown $(id -u) /somedir

অন্যের চেয়ে বেশি পছন্দ করা যায়।

এবং আপনার আরও একটি বিষয় এখানে লক্ষ্য করতে হবে হ'ল বাশ ডকুমেন্টে উল্লিখিত বাশ উদ্ধৃতি সংক্রান্ত নিয়মের সাথে কমান্ড প্রতিস্থাপনের সম্পর্ক ।

প্রতিস্থাপনটি যদি ডাবল উদ্ধৃতিগুলির মধ্যে উপস্থিত হয় তবে শব্দ বিভাজন এবং ফাইলের নাম সম্প্রসারণ ফলাফলগুলিতে করা হয় না।


8
এছাড়াও, $(...)বাসাগুলি আরও ভাল।
কুসালানন্দ

$()এবং "``"একইভাবে কাজ করবেন না
কুন

10

স্পষ্টতার একটি নোট খুব কমই কভার করা হয়েছে:

ব্যাকটিকস (কখনও কখনও গ্রেভও বলা হয় কারণ এটি ফরাসি এবং অন্যান্য ভাষায় সাধারণ উচ্চারণ হিসাবে দ্বিগুণ) কেবলমাত্র স্ট্যান্ডার্ড আউটপুটকে প্রতিস্থাপন করে তবে স্ট্যান্ডার্ড ত্রুটি নয়।

আগের উদাহরণটি চালিয়ে যেতে:

file `which hostname`

প্রত্যাশার মতো কাজ করবে তবে এতে:

file `which hostnameX`

whichএকটি ত্রুটি ফিরে আসবে, এবং সেই আউটপুটটি স্ট্যান্ডার্ড ত্রুটিতে চলে যাবে, পরিবর্তে কমান্ড লাইনের পরিবর্তে file; কোনও মানক আউটপুট আসবে না, যা আপনি চালিয়ে নিশ্চিত করতে পারেন:

which hostnameX

which hostnameX 2>/dev/null

এক্ষেত্রে,

file `which hostnameX` 

দুটি ত্রুটি বার্তা উত্পন্ন করবে (প্রথমটি, which hostnameXফাইলের কারণে প্রথমটির কারণে এবং দ্বিতীয়টি নিজের ফাইলের কারণে, এটি দেখতে পাবে যে ফাইলটির নামটি অনুপস্থিত এবং পুরো কমান্ড)

মূলত ন্যায়বিচারে হ্রাস পাবে:

file

যা অবশ্যই খারাপ ব্যবহার এবং ব্যবহারের ত্রুটি ফিরিয়ে দেবে।

(আপনি যদি নিজে নিজে এটি পরীক্ষা করতে চান তবে চেষ্টা করতে পারেন:

file `which hostnameX 2>/dev/null`    # just the file-command bad-usage error msg is printed

file `which hostnameX 2>/dev/null` 2>/dev/null  # now nothing is printed on the screen :)

4

ব্যাকটিক বদ্ধ স্ট্রিংয়ের সামগ্রীগুলি চালায়, তাই এরকম কিছু

file `which hostname`

হোস্টনেম কমান্ডের পথটি খুঁজে বের করবে এবং তারপরে আপনাকে এটি কীভাবে তৈরি করা হয়েছিল তা জানাবে।

আপনি আপনার প্রশ্নের যে আদেশটি দিয়েছেন id -uতা কার্যকর ব্যবহারকারী আইডি পেতে চালায় এবং তারপরে / ব্যবহারকারীর / সামডির মালিকানা পরিবর্তন করে।


2

এই প্রতীকটির অর্থ এটির ভিতরে যা কিছু আছে তা সেই আদেশের ফলাফল হিসাবে ব্যাখ্যা করা।

উদাহরণ স্বরূপ:

$ls /home
one two
$pwd
/usr/three
$cp `pwd` /home
$ls /home
one two three

threeডিরেক্টরিতে উপরের ফলাফলগুলি আমার /homeডিরেক্টরিতে অনুলিপি করা হচ্ছে ।


1

ব্যাকটিকগুলি কমান্ড বিকল্পের সাথে সাদৃশ্যপূর্ণ। এই ব্যাকটিক সিনট্যাক্স সেকেলে, এবং ডলার চিহ্ন জানেন দুই প্রথম বন্ধনী সঙ্গে সাধারণ হল: $()

কমান্ড প্রতিস্থাপন কি?

কমান্ড প্রতিস্থাপন হ'ল একটি কমান্ড কার্যকর করতে এবং পরবর্তী ব্যবহারের জন্য তার আউটপুটটি ভেরিয়েবলের মধ্যে সংরক্ষণের জন্য ডেডিকেটেড সিনট্যাক্স সহ একক ক্রিয়াকলাপ।

তারিখ সহ একটি উদাহরণ:

thedate=$(date)

এরপরে আমরা ফলাফলটি মুদ্রণ করতে পারি: 'তারিখটি% s \ n' "$ থেটেট" ``

  1. কমান্ড প্রতিস্থাপন সিনট্যাক্স হয় $()
  2. কমান্ড নিজেই date
  3. উভয়ের সমন্বয়ে আমরা পাই $(date)যা এর আউটপুট প্রতিস্থাপন itution
  4. printfউপরের কমান্ড অনুসারে আমরা ভেরিয়েবল দ্বারা আউটপুট মান ধরে রাখি ।
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.