Sh -c আদেশ কি?


30

আমি sh -cআদেশটি আবিষ্কার করেছিলাম । আমি এখানে পোস্ট করার আগে এটি খুঁজে পেয়েছি তবে গুগলের কাছ থেকে এমন কোনও পোস্ট খুঁজে পাওয়া যায় না যা এটি ব্যাখ্যা করে, তাই আমি এটি জানতে চাই এবং এটির সম্পূর্ণ বাক্য গঠন কী।

উত্তর:


34

shপ্রোগ্রামটিকে shদোভাষী হিসাবে ডাকা হয় এবং -cপতাকাটির অর্থ এই প্রোগ্রাম দ্বারা ব্যাখ্যা করা হিসাবে নিম্নলিখিত কমান্ডটি কার্যকর করা হয়।

উবুন্টুতে shসাধারণত এটির সাথে মিল থাকে /bin/dash, অর্থাত আপনি sh -cড্যাশ শেল দিয়ে একটি কমান্ড প্রয়োগ করলে ব্যাশের পরিবর্তে কমান্ডটি কার্যকর করতে ব্যবহৃত হবে। সাথে পরিচিত শেলটি shসিমলিংকের উপর নির্ভর করে - আপনি এটি খুঁজে পেতে পারেন readlink -e $(which sh)। আপনি sh -cযখন ব্যাশের পরিবর্তে শেলটি দিয়ে একটি কমান্ড বিশেষভাবে কার্যকর করতে চান তখন আপনার ব্যবহার করা উচিত ।

আপনি -cঅন্য বাক্যাংশকারীর সাথেও এই সিনট্যাক্সটি ( পতাকা) ব্যবহার করতে পারেন । এর একটি ক্লাসিক ব্যবহার (@ এডউইনকসেল দ্বারা নির্দেশিত হ'ল সুডোর সাথে কাজ না করা পুনর্নির্দেশের সমস্যাটি ঘুরে আসা (এখানে আপনি ব্যবহার করতে পারেন bash -cবা sh -c))

sudo sh -c 'echo "foo" > /home/bar'

ফাইলটি লিখতে হবে barটেক্সট ধারণকারী fooকরার /home/সময়, sudo echo "foo" > /home/barব্যর্থ হিসাবে খুব ভাল এখানে ব্যাখ্যা

কমান্ড স্ট্রিংয়ের চারপাশে 'একক উদ্ধৃতি' ব্যবহার করা জরুরী, অন্যথায় বর্তমান শেল আপনার ডাকাডাকীর কাছে যাওয়ার আগে এটি প্রসারিত করার চেষ্টা করবে

উদাহরণস্বরূপ (অজগর সহ আমি যতক্ষণ না কমান্ডের কথা চিন্তা করি যা ড্যাশগুলিতে বিভিন্ন ফলাফল দেয় ...)

$ python3 -c print (35/7)
bash: syntax error near unexpected token `('
$ python3 -c 'print (35/7)'
5.0

আপনি কীভাবে ব্যবহার sh -cকরবেন তার একটি উদাহরণ সরবরাহ করতে পারেন ? এটি -cঅংশে উল্লিখিত অবস্থানগত পরামিতিগুলির অ্যাসাইনমেন্ট প্রদর্শন করলে অতিরিক্ত দুর্দান্ত হবে man sh
এডউইনকস্ল

15

-cযুক্তি হল:

স্ট্যান্ডার্ড ইনপুটের পরিবর্তে কমান্ড_স্ট্রিং অপারেন্ড থেকে কমান্ডগুলি পড়ুন। কমান্ড_নাম অপারেন্ড থেকে বিশিষ্ট প্যারামিটার 0 সেট করা হবে এবং বাকী আর্গুমেন্ট অপারেন্ডগুলি থেকে অবস্থানগত পরামিতি ($ 1, $ 2 ইত্যাদি) সেট করা হবে।

shযুক্তিগুলির অন্যান্য বিবরণগুলি চালিয়ে পাওয়া যাবে:

$ man sh

আর্গুমেন্ট হিসাবে স্ট্রিং ব্যবহার করার একটি উদাহরণ:

$ sh -c "echo This is a test string"

এটি আরও বিশদ sh -cউদাহরণ। এটি গুগল ড্রাইভ থেকে একটি দস্তাবেজ ডাউনলোড করবে এবং ডেস্কটপে সম্পাদনার জন্য এটি খুলবে:

$ sh -c "wget 'https://docs.google.com/document/u/0/d/1jcBtdlMx0f4BhCmAmnIViIy4WN4oRevWFRzse-P00j0/export?format=docx' -O test.docx && xdg-open test.docx 2>/dev/null"

11

sh -c( উবুন্টুতে) একটি অ-লগইন , অ-ইন্টারেক্টিভ অধিবেশন তৈরি করে ।shdash

কমান্ড অনুসরণ যে শেল সেশনে চলবে, এটা যুক্তি (অবস্থানগত প্যারামিটার) নামে 0 (চিকিত্সা করা হবে ARGV0), এবং যে কমান্ড যুক্তি (যেমন অবশিষ্ট অংশ ARGV0), 1 থেকে শুরু ( ARGV1, ARGV2, ...)।

আপনি এই ধরণের সেশনে চালুর জন্য অনুমোদিত শেল বৈশিষ্ট্যগুলিও ব্যবহার ;করতে পারেন যেমন একাধিক কমান্ড ব্যবহার করে কমান্ড বিভাজন, কমান্ড গোষ্ঠীকরণ ব্যবহার করে {}, অন্য একটি সাব- শেল স্প্যান করা ()ইত্যাদি। এগুলির ব্যবহার পূর্বে উল্লিখিত যুক্তির সংজ্ঞা / উদাহরণগুলিকে সামান্য পরিবর্তন করতে পারে।


শুধু নোটটিতে, বৈশিষ্ট্য যে নির্দিষ্ট ইন্টারেক্টিভ শেল শুধুমাত্র (ডিফল্ট অনুসারে), যেমন ইতিহাস সম্প্রসারণ, sourceএর -ing ~/.bashrcএবং /etc/bash.bashrcইত্যাদি এই সেশনের উপলব্ধ নাও হতে হবে এটা নন-ইন্টারেক্টিভ-iবিকল্পটি ব্যবহার করে আপনি একটি ইন্টারেক্টিভ সেশনস আচরণ (প্রায়) অনুকরণ করতে পারেন :

sh -ic ...

একইভাবে, বৈশিষ্ট্যগুলি যেগুলি লগইন শেলগুলির জন্য নির্দিষ্ট (ডিফল্টরূপে) যেমন- sourceউইংয়ের ~/.profile(প্রদত্ত ~/.bash_profileএবং ~/.bash_loginঅস্তিত্ব নেই) সুনির্দিষ্ট এবং /etc/profileশেলটি একটি লগ-ইন শেল হওয়ায় এটি সম্পন্ন হবে না । আপনি -lবিকল্পটি ব্যবহার করে লগইন-শেল আচরণ অনুকরণ করতে পারেন :

sh -lc ...

লগইন এবং ইন্টারেক্টিভ উভয় সেশনের অনুকরণ করতে:

sh -lic ...

+1 "sh -c একটি নন-লগইন, শ-এর অ-ইন্টারেক্টিভ অধিবেশনকে উত্সাহিত করে"
JSON C11
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.