আমি কীভাবে শেল স্ক্রিপ্টগুলির POSIX সম্মতির জন্য পরীক্ষা করতে পারি?


72

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

এমন কোনও শেল রয়েছে যা কেবলমাত্র পসিক্স এবং পসিক্সকে কার্যকর করে, এমন কোনও উপায়ে কোনও আনুগত্যের বৈশিষ্ট্যটির জন্য এটির ত্রুটি ছুঁড়ে মারবে?

সম্পাদনা করুন আমি স্পষ্ট করতে চাই যে আমি পোর্টেবল শেল স্ক্রিপ্টগুলি লেখার জন্য সাধারণ টিপস চাইছি না। মন্তব্যে উল্লিখিত সম্পর্কিত প্রশ্ন ইতিমধ্যে এটি কভার করেছে। আমি যখন এই প্রশ্নটি ভেবেছিলাম তখন bashএটির একটি --posixবিকল্প রয়েছে তবে কেবল এটি আবিষ্কার করতে পেরে এটি কেবল কিছু অন্তর্নিহিত আচরণকেই প্রভাবিত করে যা আমি যা খুঁজছি ঠিক তা নয়।



@ গিলস: সম্ভবত আমার উল্লেখ করা উচিত যে আমি এই প্রশ্নটি নিয়ে এসেছি তবে কেবলমাত্র একটি উত্তরই পরীক্ষার পরামর্শ দিয়েছে dash। আমি আমার প্রশ্নের সাধারণ প্রেক্ষাপট হিসাবে বহনযোগ্যতা উল্লেখ করেছি কিন্তু এটি এর আসল উদ্দেশ্য ছিল না।
রাহমু

অবশ্যই, আমি দুটি প্রশ্নকে লিঙ্কযুক্ত করতে চেয়েছিলাম কারণ তারা একই ব্যক্তির পক্ষে আগ্রহী হতে পারে। এগুলি কোনওভাবেই সদৃশ নয়। যাইহোক, পশ ড্যাশের চেয়ে পসিক্স কমপ্লায়েন্সের জন্য আরও ভাল পরীক্ষা।
গিলস

2
, busybox চমত্কার POSIX এবং POSIX শুধুমাত্র কাছাকাছি। একটি জিনিস যা আপনাকে ট্রিপ করতে পারে তা হ'ল আপনি যদি অন্যান্য প্যাকেজও ইনস্টল করেন (যেমন ডিফিউটিস) তবে এটি বৈশিষ্ট্যগুলি যুক্ত করতে পারে। চেকআউট আল্পাইন লিনাক্সের লাইভসিডি যা আপনাকে খাঁটি ব্যস্তবক্স পরিবেশের সাথে শুরু করে। আলপাইন ম্যাসেল সি লাইব্রেরি ব্যবহার করে যাতে আপনি GNU এক্সটেনশানগুলি পান না যা বর্ধিত নিয়মিত এক্সপ্রেশনগুলির মতো বৈশিষ্ট্যগুলি যুক্ত করতে পারে।
মাইকেল ফক্স

উত্তর:


37

দুর্ভাগ্যক্রমে, 'পোর্টেবল' শেল স্ক্রিপ্টগুলির জন্য 'পসিক্স-কমপ্লায়েন্ট' এর চেয়ে সাধারণত একটি শক্তিশালী প্রয়োজন। এটি হ'ল যে কোনও পসিক্স শেলের উপর দিয়ে চলে এমন কিছু লেখা খুব কঠিন নয়, তবে এটি কোনও বাস্তব-বিশ্বের শেলের উপর চালানো শক্ততর।

আপনি আপনার প্যাকেজ ম্যানেজারে প্রতিটি শেল ইনস্টল করে, বিশেষভাবে ডেবিয়ানের poshশব্দ যা চান তা (পলিসি-সম্মতিযুক্ত সাধারণ শেল) এর মাধ্যমে শুরু করতে পারেন। দেবিয়ান নীতিটি কয়েকটি ব্যতিক্রম ( echo -nনির্দিষ্ট, local...) সহ পসিক্স ।

তবুও, পরীক্ষার জন্য কয়েকটি শেল (/ বিন / শ বিশেষত) বেশ কয়েকটি প্ল্যাটফর্মের আচ্ছাদন করতে হবে। আমি সোলারিস (/ বিন / শ এবং এক্সপিজি 4 / এস), এবং বিএসডি পরীক্ষা করি। এআইএক্স এবং এইচপি-ইউএক্স খুব কমপ্লায়েন্ট এবং সমস্যা তৈরি করে না। বাশ এর নিজস্ব একটি ছোট্ট বিশ্ব।

আমি পোর্টেবল শেলটির জন্য অটোকনফ গাইডের সুপারিশ করব যা একেবারে উজ্জ্বল এবং অনেক সময় সাশ্রয় করে। এর বড় অংশগুলি অচল, তবে এটি ঠিক আছে; আপনি যদি যত্ন না করেন তবে ট্রুউনিক্স এবং আলট্রিক্স এবং এড়িয়ে চলুন!


poshআমি যা চাইছি তা আসলেই শোনাচ্ছে। আমি যত তাড়াতাড়ি সম্ভব কিছু পরীক্ষা করব।
রাহমু

1
আমি সম্পর্কিত প্রশ্ন চিহ্নিত করার আগে উত্তর! পশ হ'ল ডেবিয়ান জিনিস, সুতরাং প্রতিটি সিস্টেমে প্যাকেজ করা হবে না। এছাড়াও, শেলটি সবচেয়ে বেশি চিন্তিত হওয়ার বিষয় নয়; সেড অসম্পূর্ণতা একটি বড় সমস্যা, উদাহরণস্বরূপ।
নিকোলাস উইলসন

আমি সোলারিস / বিন / এস ওরফে বোর্ন শেল (যা পসিক্স নয়) এ পোর্টিং করতে বিরক্ত করব না। সমস্ত আধুনিক ইউনিয়নের মতো সোলারিসের একটি পসিক্স শেল রয়েছে, এটি কেবলমাত্র সাধারণ স্থানে না হয়ে থাকে (/ usr / xpg4 / বিন / শ)
স্টাফেন চেজেলাস

দুঃখের বিষয়, আমরা এমন স্ক্রিপ্টগুলি শিপ করি যা কমপক্ষে প্রতিটি / বিন / এসকে চালাতে হয়। এটি এতটা খারাপ নয় ... তবে এটি করার দরকার নেই।
নিকোলাস উইলসন

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

28

আপনি শেল স্ক্রিপ্টগুলির জন্য একটি শিবির হিসাবে শেলচেক (গিটহাব) ব্যবহার করতে পারেন । একটি অনলাইন সংস্করণও রয়েছে

পসিক্স সামঞ্জস্যতার সমস্যাগুলি সনাক্ত করতে (যেমন এসসি 2039 ), আপনার শেল স্ক্রিপ্টের শেবাং লাইনটি হওয়া উচিত #!/bin/sh। আপনি পাস --shell=shকরতে পারেন shellcheck

উদাহরণ ( test.sh):

#!/bin/sh
if [[ $HOSTNAME == test ]]; then
    echo fail &> foo
fi

ফলাফল ( shellcheck test.sh):

In test.sh line 2:
if [[ $HOSTNAME == test ]]; then
   ^-- SC2039: In POSIX sh, [[ ]] is undefined.
      ^-- SC2039: In POSIX sh, HOSTNAME is undefined.    

In test.sh line 3:
    echo fail &> foo
              ^-- SC2039: In POSIX sh, &> is undefined.

1
এত বছর এবং আমি কখনই শেলচেকের কথা শুনিনি ... লিঙ্কটির জন্য ধন্যবাদ!
টন ভ্যান ড্যান হিউভেল

সর্বকালের সেরা সরঞ্জাম! বিশেষত এর একটি অনলাইন সংস্করণ থাকা খুব দ্রুত কোডের একটি টুকরো পরীক্ষা করা দুর্দান্ত!
মক্কি

12

POSIXLY_CORRECTএনভায়রনমেন্ট ভেরিয়েবল সেট করা থাকলে ব্যাশ পসিক্স-কমপ্লায়েন্ট মোডে চলবে । ম্যানপেজ থেকে:

   POSIXLY_CORRECT
          If  this  variable  is  in the environment when bash starts, the
          shell enters posix mode before reading the startup files, as  if
          the  --posix  invocation option had been supplied.  If it is set
          while the shell is running, bash enables posix mode, as  if  the
          command set -o posix had been executed.

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


21
এমনকি পসিক্স মোডে, ব্যাশ এখনও কিছু নন-পসিক্স বৈশিষ্ট্যগুলিকে মঞ্জুরি দেয় [[
jordanm
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.