"Sh" কি "/ বিন" ডিরেক্টরিতে থাকতে হবে?


16

আমি পড়েছি যে পসিএক্স কমপ্লায়েন্ট অপারেটিং সিস্টেমগুলিতে (উদাহরণস্বরূপ: লিনাক্স) অবশ্যই shশেল থাকতে হবে।

কিন্তু এটা প্রয়োজন হয় shহতে /binডিরেক্টরি, অথবা এটি কোন ডিরেক্টরির মধ্যে হতে পারে?


আপনি সর্বদা /bin/shলিনাক্সের ক্ষেত্রে একটি সিমলিংক ব্যবহার করতে পারেন , এটি ইতিমধ্যে একটি সিমলিংক bash। এটি ঠিক যে প্রচুর স্ক্রিপ্ট /bin/sh
হার্ডকডযুক্ত

5
এখন যেহেতু এটির যে কোনও জায়গাতেই থাকতে পারে এমন উত্তর আপনার কাছে রয়েছে, আপনি নিজেকে জিজ্ঞাসা করতে পারেন: তাহলে আপনি কীভাবে বহনযোগ্যভাবে একটি শেবাং লাইন লিখতে পারেন sh? এবং উত্তরটি হল: শেবাং কোনওভাবেই পসিক্সের অংশ নয়, সুতরাং সমস্যাটি নিজেই উপস্থাপন করে না।
জার্গ ডব্লু মিট্টাগ

1
@ জার্গডব্লিউমিত্যাগ হ্যাঁ, এটি কখনও কখনও আশ্চর্য হয়ে যায় যে আমরা "স্ট্যান্ডার্ড" ইউনিক্স বৈশিষ্ট্য হিসাবে যে জিনিসগুলি মনে করি তার মধ্যে পসিক্স আসলেই প্রয়োজনীয় নয়।
বর্মার

1
আপনি শেবাং ব্যবহার করেন বা করবেন না /bin/shপসিক্স সিস্টেমে পাথের অবশ্যই অস্তিত্ব আছে কিনা of
চ্যানার

অন্তত উবুন্টু থেকে প্রাপ্ত সিস্টেমগুলিতে এর /bin/shলিঙ্ক dash। বিএসডিগুলিতে /bin/shএটি কি কোনও লিঙ্ক নয় তবে পৃথক সম্পাদনযোগ্য, এবং অবশ্যই তা নয় bash
রিয়াল্তো

উত্তর:


22

POSIX শুধুমাত্র ম্যান্ডেট /devএবং /tmpঅস্তিত্ব ডিরেক্টরি , এবং /dev/null, /dev/ttyএবং /dev/consoleফাইল। মানক ইউটিলিটিগুলি অবশ্যই উপস্থিত থাকতে হবে, তবে নির্দিষ্ট কোনও নির্দিষ্ট স্থান নেই। একটা নাও হতে পারে /binএ সব, এবং এটি একটি নাও থাকতে পারে আছে যদি sh, এবং যদি এটা আছে যে একটি POSIX নাও হতে পারে sh

আপনাকে অবশ্যই একটি বৈধ পেতে পারেন PATHপরিবর্তনশীল যে POSIX সরঞ্জাম অন্তর্ভুক্ত সহ shসঙ্গে, getconfকমান্ড :

$ PATH=$(getconf PATH)
$ sh

এটি উদাহরণস্বরূপ, সোলারিসের ক্ষেত্রে কার্যকর হতে পারে যেখানে ডিফল্টটি shপসিক্স-সামঞ্জস্যপূর্ণ নয় , তবে একটি অনুগতভাবে shসরবরাহ করা হয় এবং সেভাবে অ্যাক্সেসযোগ্য হয় (কারণ সোলারিস একটি প্রত্যয়িত ইউনিক্স )। সামনের অংশে getconf PATHঅন্তর্ভুক্ত থাকবে /usr/xpg4/bin, যার মধ্যে পসিক্স shএবং অন্যান্য প্রয়োজনীয় প্রয়োজনীয় সংখ্যক সরঞ্জাম রয়েছে ( যেমন অকেজো বিষয়গুলি সহcd )।


পুনরায় সোলারিস: ... যদি না আপনি সোলারিস "ছোট সার্ভার" ইনস্টলেশন চালাচ্ছেন, যা অনেকগুলি পসিক্স সরঞ্জাম বাদ দেয়। দেখুন unix.stackexchange.com/q/360359/135943
ওয়াইল্ডকার্ড

"বেহুদা"? আমি বরং তাদেরকে অপ্রয়োজনীয় বলব।
মুকেশ সাই কুমার

2
সুতরাং কিভাবে getconf পাওয়া যায়?
জোশুয়া

@ মুকেশসাইকুমার একটি একা একা 'সিডি' কমান্ড কখনই কাজ করতে পারে না
অরেঞ্জডগ

ঠিক আছে, এটি কেবলমাত্র কাজ করার মূল্যের জন্য "কাজ করবে", বলুন, আপনি ডিরেক্টরিতে পরিবর্তন করতে পারবেন কিনা তা পরীক্ষা করে , কিন্তু প্রকৃতপক্ষে প্রক্রিয়াটি এটি ছেড়ে দেয় না। এটি মোটেও কারও চেয়ে বেশি কার্যকারিতা নয়।
চার্লস ডফি

12

না, এটা জন্য প্রয়োজন হয় না shহতে /bin। এটা তোলে স্পষ্টভাবে উল্লেখ /bin, /usr/binএবং /usr/xpg4/binসম্ভব অবস্থানগুলির মতো। পসিক্স স্পেকের কেবল shপ্যাথ-এ থাকা প্রয়োজন ।

POSIX বৈশিষ্ট পদ বলে:

অ্যাপ্লিকেশনগুলিতে অবশ্যই লক্ষ্য করা উচিত যে শেলের কাছে স্ট্যান্ডার্ড PATH হয় না তা ধরে নেওয়া যায় না /bin/shবা /usr/bin/sh, এবং getconf PATH দ্বারা ফেরত PATH জিজ্ঞাসাবাদ দ্বারা নির্ধারণ করা উচিত, নিশ্চিত করা হয়েছে যে ফিরে আসা পথটি একটি নিখরচীন পথের নাম এবং শেলটি অন্তর্নির্মিত নয়।

উদাহরণস্বরূপ, স্ট্যান্ডার্ড sh ইউটিলিটির অবস্থান নির্ধারণ করতে:

command -v sh

কিছু বাস্তবায়নের ক্ষেত্রে এটি ফিরে আসতে পারে:

/usr/xpg4/bin/sh


2

এখানে অন্যরা যেমন বলেছে, পসিক্স সম্মতির জন্য এটি কঠোরভাবে প্রয়োজন হয় না।

তবে তাত্ক্ষণিকভাবে বিদ্যমান সফ্টওয়্যারটির সাথে সামঞ্জস্যতা অনেক বেশি গুরুত্বপূর্ণ (সর্বোপরি, পসিক্সের উদ্দেশ্য হ'ল নির্দিষ্ট কিছু জিনিসগুলি সমস্ত আনুষঙ্গিক অপারেটিং সিস্টেমগুলিতে কাজ করা হয়) এবং যদি কোনও ওএস এস এ sh সরবরাহ না করে তবে /bin/shএটি কিছু জিনিসকে ভেঙে ফেলবে।

স্পষ্টতই, #!/bin/shএই পথের উপর নির্ভরশীল স্ক্রিপ্টগুলি মানক করা হচ্ছে। এটি কাজ করার প্রয়োজন হয় না; পসিক্সের এমনকি #!লাইনগুলি সমর্থিত হওয়া প্রয়োজন হয় না , যদিও এটি উল্লেখ করে যে এই জাতীয় কার্যকারিতা সাধারণ :

কিছু historicalতিহাসিক বাস্তবায়ন শেল স্ক্রিপ্টগুলি পরিচালনা করে এমন একটি উপায় হ'ল "#!" এবং ফাইলটির প্রথম পংক্তির বাকী অংশটি কমান্ড ইন্টারপ্রেটারের নাম হিসাবে কার্যকর করা যায়।

তবে যদি এটি সমর্থিত না হয় তবে প্রচুর বিদ্যমান সফ্টওয়্যারটি পোর্টে ভেঙে যাওয়ার বা অতিরিক্ত কাজের প্রয়োজন হবে।

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