বাশ স্ক্রিপ্টগুলির পরিবর্তে zsh ব্যবহার করার পরামর্শ দেওয়া হচ্ছে? [বন্ধ]


25

আমি কি ধরে নিতে পারি যে zshএকটি দ্বারা স্ক্রিপ্ট চালানোর জন্য পর্যাপ্ত লোকেরা ইনস্টল করেছেন

#!/usr/bin/env zsh

শেবাং হিসাবে?

অথবা এটি কি আমার স্ক্রিপ্টগুলি অনেক বেশি সিস্টেমে চালিত করতে সক্ষম হবে?

স্পেসিফিকেশন: আমি কোনও শেষ ব্যবহারকারী ব্যবহার করতে পারে এমন প্রোগ্রাম / স্ক্রিপ্টগুলিতে আগ্রহী (যেমন উবুন্টু, দেবিয়ান, সুস, আর্ক এবং সি এর মতো)


4
অদ্ভুত প্রশ্ন। কে আপনার লক্ষ্য? নির্দিষ্ট চেনাশোনাগুলিতে (রুবি অন অন রেয়েল ওয়েব বিকাশকারী) zshজনপ্রিয় হতে পারে অন্যের মধ্যে (ব্যাংকিং সেক্টর) এটি কার্যত অনাহূত। আমি মনে করি আপনার যদি এই বিষয়ে সঠিক পরামর্শের প্রয়োজন হয় তবে আপনাকে আরও অনেক তথ্য দেওয়া উচিত।
রাহমু

জেনারেল লিনাক্স শেষ ব্যবহারকারী বিশ্বের।
প্রোফ্যাপাটস

2
ডাব্লুআরটি "জেনারেল লিনাক্স এন্ড ইউজার ওয়ার্ল্ড", zsh অ-মানক। এটি ডিফল্টরূপে ইনস্টল করা হয়নি (সর্বাধিক বা সমস্ত ডিস্ট্রোগুলিতে) বা যে কোনও কিছুর দ্বারা প্রয়োজনীয়, তাই বেশিরভাগ লোকেরা এটি পাবেন না।
স্বর্ণলোকগুলি

3
আমি নি zshইনস্টল কোনো আমার ব্যবস্থা এবং আমি তা একটি একক স্ক্রিপ্টের জন্য ইনস্টল করা যাবে। এমনকি আপনার বাশিজম এড়ানো উচিত যদিও বাশ সাধারণত পাওয়া যায়।
frostschutz

উত্তর:


29

বহনযোগ্যতার জন্য, না। যদিও zshকমপক্ষে সাইগউইনের মাধ্যমে কোনও ইউনিক্স বা ইউনিক্সের মতো এমনকি উইন্ডোজেও সংকলন করা যায় এবং বেশিরভাগ ওপেন সোর্স ইউনিক্স-পছন্দ এবং বেশ কয়েকটি বাণিজ্যিক সংস্থার জন্য প্যাকেজ করা হয় তবে এটি সাধারণত ডিফল্ট ইনস্টলটিতে অন্তর্ভুক্ত থাকে না।

bashঅপর প্রান্তে জিএনইউ সিস্টেমে ইনস্টল করা হয়েছে (যেমন bashজিএনইউ প্রকল্পের শেল) নন-এমবেডড লিনাক্স ভিত্তিক সিস্টেমের অনেকাংশ এবং কখনও কখনও অ্যাপল ওএস / এক্স এর মতো নন-জিএনইউ সিস্টেমে। বাণিজ্যিক ইউনিক্সের দিক থেকে, কর্ন শেল (এটিএন্ডটি ভেরিয়েন্ট, যদিও আরও বেশি ksh88) হ'ল আদর্শ এবং উভয় bashএবং al zshচ্ছিক প্যাকেজগুলিতে রয়েছে। BSD গুলোর উপর, পছন্দের ইন্টারেক্টিভ শেল প্রায়ই হয় tcshযখন shপারেন Almquist শেল বা উপর ভিত্তি করে তৈরি pdkshএবং bashবা zshপ্রয়োজন হিসাবে ভাল ঐচ্ছিক প্যাকেজ হিসাবে ইনস্টল করা হবে।

zshঅ্যাপল ওএস / এক্স এ ডিফল্টরূপে ইনস্টল করা আছে। এমনকি এটি /bin/shসেখানে ব্যবহৃত হত । এটি ডিফল্টরূপে কয়েক লিনাক্স ডিস্ট্রিবিউশনের মতো সিসরেসসিডিসিডি, জিআরএমএল, গোবোলিনাক্স এবং সম্ভবত অন্যদের মধ্যে পাওয়া যেতে পারে, তবে আমি কোনও বড়টিকে মনে করি না।

পছন্দ করুন bash, ইনস্টল করা সংস্করণ এবং ফলস্বরূপ বৈশিষ্ট্যগুলি উপলভ্য হওয়ার প্রশ্ন রয়েছে। উদাহরণস্বরূপ, bash3বা এর সাথে সিস্টেমগুলি খুঁজে পাওয়া অস্বাভাবিক নয় zsh3। এছাড়াও, আপনি যে স্ক্রিপ্টটির জন্য এখন লিখবেন zsh5তার পিছনে সামঞ্জস্য বজায় রাখার চেষ্টা করার zsh6মতো কাজ করলেও এর কোনও গ্যারান্টি নেই bash

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

তারপরে, আপনার বিকল্পগুলি হ'ল:

  • পার্ল যা সর্বব্যাপী (যদিও আপনাকে আবার পুরানো সংস্করণগুলির বৈশিষ্ট্য সেটটিতে সীমাবদ্ধ করতে হতে পারে, এবং ডিফল্টরূপে ইনস্টল করা পার্ল মডিউলগুলিতে অনুমান করতে পারে না)
  • আপনার স্ক্রিপ্টের জন্য নির্ভরতা হিসাবে দোভাষী এবং এর সংস্করণ (অজগর ২.6 বা তার বেশি, zsh 4 বা উপরে, বাশ 4.2 বা উপরে ...) নির্দিষ্ট করুন, হয় প্রতিটি লক্ষ্যযুক্ত সিস্টেমের জন্য একটি প্যাকেজ তৈরি করে যা নির্ভরতা নির্দিষ্ট করে অথবা এটি নির্ধারণ করে আপনার স্ক্রিপ্টের সাথে প্রেরণ করা একটি README ফাইলে বা আপনার স্ক্রিপ্টের শীর্ষে মন্তব্য হিসাবে এম্বেড করা, বা আপনার স্ক্রিপ্টের শুরুতে বোর্ন সিনট্যাক্সের কয়েকটি লাইন যুক্ত করে যা অনুরোধ করা দোভাষীটির উপলভ্যতা পরীক্ষা করে এবং একটি স্পষ্ট ত্রুটির সাথে ব্যাল আউট করে যখন এটি না হয়, যেমন এই স্ক্রিপ্টটির zsh 4.0 বা তারও বেশি প্রয়োজন
  • আপনার স্ক্রিপ্টের পাশাপাশি দোভাষীকে শিপ করুন (লাইসেন্সিং সংক্রান্ত প্রভাবগুলি থেকে সাবধান থাকুন) যার অর্থ আপনার প্রতিটি লক্ষ্যযুক্ত ওএসের জন্য একটি প্যাকেজও প্রয়োজন need কিছু দোভাষী অনুবাদককে একক সম্পাদনযোগ্য ক্ষেত্রে স্ক্রিপ্ট এবং এর দোভাষীকে প্যাক করার একটি উপায় সরবরাহ করে এটি আরও সহজ করে তোলে।
  • এটি সংকলিত ভাষায় লিখুন। আবার, লক্ষ্যযুক্ত সিস্টেমের জন্য একটি প্যাকেজ।

"zsh-man" "না" বলছে, আমি আপনার জন্য গর্বিত! ^^ বহনযোগ্যতা এফটিডব্লু! (এর সমস্ত সতর্কতা সহ ...)। +1 টি।
অলিভিয়ার ডুলাক

9

না তুমি পারবে না. গ্যারান্টিযুক্ত যা পাওয়া যায় তা হ'ল /bin/shমূল বোর্ন শেল। প্রায় সবগুলি ("প্রায়" নোট করুন!) লিনাক্স ইনস্টলেশনগুলিতে ব্যাশ থাকবে, তবে * বিএসডি সিস্টেমে এটি বিরল (বিএসডি অনুচ্ছেদে জিপিএল কোড, যেমন বাশের মতো গুরুতর বিভ্রান্তি রয়েছে)। আমি জানি না ম্যাকের মানক শেলটি কী, তবে আবার জিপিএল সম্পর্কে বিভ্রান্তি রয়েছে। সোলারিসের জন্য একই।

zsh একটি কুলুঙ্গি শেল, এটি ফেডোরার ডিফল্ট ইনস্টলটিতে নেই (এবং আমি বিশ্বাস করি না এটি কোনও বড় ডিস্ট্রিবিউটের জন্য এটি ডিফল্ট)।


6
অবশ্যই মূল বোর্ন শেল নয়, বরং পসিক্স কমপ্লায়েন্ট সিস্টেমে একটি পক্সিক্স শেল, যা অনেকগুলি সিস্টেমে / বিন / শ হয়, তবে প্রয়োজনীয় নয় (সোলারিস <= সংস্করণ 10 এ এটি / ইউএসআর / এক্সপিজি 4 / বিন / শ)
স্ক্রুটিনাইজার

ঠিক আছে, "ডিফল্ট" ইনস্টলটি আসলে কোনও বিষয় নয়। এটি যদি ইনস্টল করা হয় তবে তা গুরুত্বপূর্ণ।
প্রফ্যাপাটস

@ প্রফটপাটস, তারপরে ডিফল্ট ইনস্টলটি খুব প্রাসঙ্গিক (সম্ভবত বিতরণটি লোকেরা কী ব্যবহার করে তা নির্ধারণ করে)।
ভোনব্র্যান্ড

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

1
নোট যদি আপনি বিবেচনা লিনাক্স মহান অধিকাংশ স্থাপনার যে আজকাল এমবেড করা হয় (Android মনে করি, প্রিন্টার, রাউটার, TV, lightbulbs ...) যে লিনাক্স ভিত্তিক সিস্টেমের মহান সংখ্যাগরিষ্ঠ নেই না আছে bash(যদিও ঐ সমস্ত সিস্টেমে সম্ভবত প্রধান নয় ওপিকে তার প্রশ্নের জন্য মনে মনে রেখেছিল)
স্টাফেন চেজেলাস

2

আমি মনে করি এটি কী zsh অতিরিক্ত বৈশিষ্ট্যগুলি আপনি ব্যবহার করছেন এবং কোথায় তা নির্ভর করে । আপনি যদি বিভিন্ন স্ক্রিপ্ট এবং বিভিন্ন সিস্টেমে আপনার স্ক্রিপ্ট বিতরণ করার পরিকল্পনা করছেন তবে আমি ব্যাশ বা এমনকি sh ব্যবহার করার পরামর্শ দেব ।

একই সময়ে যদি আপনার স্ক্রিপ্টটি আপনার সংস্থা জুড়ে কার্যকর করার জন্য ডিজাইন করা হয় এবং আপনার মেশিনগুলিতে zsh করার কনভেনশন থাকে (উদাহরণস্বরূপ একই বেসিক এএমআই) এবং আপনার টাস্কের অ্যাডভান্সড ফাইল সিলেক্ট্রে বা এক্সটেনশনের যেমন http: / /www.rayninfo.co.uk/tips/zshtips.html আমি বলব এগিয়ে যাও!


1

যেমনটি বলা হয়েছে, bashঅনেকগুলি ডিস্ট্রোর জন্য সাধারণত ডিফল্ট ইনস্টলেশনতে উপলব্ধ। আপনার স্ক্রিপ্ট ভরসা করে সর্বোচ্চ ব্যবহারকারীর বেসে পৌঁছাবে না zsh

আপনার স্ক্রিপ্টটি ডিজাইনের আগে উত্তর দেওয়ার জন্য একটি গুরুত্বপূর্ণ প্রশ্ন হ'ল " কোন স্ক্রিপ্টটি কোন শেলটিতে কার্যকর করা হয় তা কেন ব্যাপার? "

বিভিন্ন শেল বিভিন্ন সিনট্যাক্স ব্যবহার করে বা অতিরিক্ত শেল ফাংশন সরবরাহ করে যা অন্যান্য শেলগুলি সমর্থন করে না। "জেনারেল লিনাক্স এন্ড ইউজার ওয়ার্ল্ড" এর জন্য একটি স্ক্রিপ্ট লিখতে, আপনার স্ক্রিপ্টটি কোনও শেল্ট পরিবেশের উপর নির্ভর করে এমন কোনও সিনট্যাক্স বা শেল ফাংশন ব্যবহার করে কিনা তা নির্ধারণ করুন।

উদাহরণস্বরূপ, bashশেল কিছু নির্দিষ্ট সম্প্রসারণকে সমর্থন করে যা সমর্থিত নয় dash, বোর্ন শেল বা /bin/shব্যবহারকারীর সিস্টেমে যা কিছু নির্দেশ করে।

$ ls -l /bin/sh 
lrwxrwxrwx 1 root root 4 Feb 19  2014 /bin/sh -> dash

এর echo {1..10}সাথে /bin/shতুলনা করে এক্সিকিউট করার চেষ্টা করুন /bin/bashএবং আপনি খুব আলাদা আউটপুট পাবেন।

এটি একই জন্য যায় zsh, বেশিরভাগ bashসিনট্যাক্সকে সমর্থন করার সময় , bashশেল দ্বারা সমর্থিত নয় এমন অতিরিক্ত সম্প্রসারণ এবং বাক্য গঠন সরবরাহ করে । নির্দিষ্ট উদাহরণগুলির জন্য শেলগুলির তুলনা করে এই টেবিলগুলি দেখুন ।

bashযখন ডাকা হয় তখন কাজ করে এমন স্ক্রিপ্টগুলিকে মেনে চলার মাধ্যমে আপনি আপনার সম্ভাব্য ব্যবহারকারী বেসকে ছাড়িয়ে যেতে পারেন #!/bin/sh -u। তবে এটি জিজ্ঞাসা করার জন্য আরও একটি গুরুত্বপূর্ণ প্রশ্ন জাগায়: " বৃহত্তর বহনযোগ্যতার বিনিময়ে কী বলি দেওয়া হচ্ছে? "

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

কমান্ড শেলগুলি তুলনাbash করার সময় এই স্ক্রিপ্টগুলির জন্য সমর্থনের জন্য অনেকগুলি স্ক্রিপ্ট লিখিত হয় । আপনার স্ক্রিপ্টটি শেল পরিবেশের উপর নির্ভর করে বা অন্য কোনও সিনট্যাক্সের উপর নির্ভর করে তার চেয়ে অনেক বেশি লোক আপনার স্ক্রিপ্টটি চালাতে সক্ষম হবে ।zsh

এছাড়াও, মনে রাখবেন যে ব্যবহারকারী কীভাবে স্ক্রিপ্টটি কার্যকর করে ( বিভিন্ন শেলের মধ্যে স্ক্রিপ্টগুলি ডিবাগ করার জন্যও কার্যকর ) তার উপর আপনার শেষ পর্যন্ত নিয়ন্ত্রণ নেই :

মনে রাখবেন যে আপনি যদি শেল স্ক্রিপ্টটি পড়ার জন্য শেল ব্যবহার করেন ("শ স্ক্রিপ্টনাম") এটি সরাসরি চালানোর পরিবর্তে ("./scriptname"), শেলটি শেল স্ক্রিপ্টের শুরুতে সমস্ত মন্তব্যকে মন্তব্য হিসাবে বিবেচনা করবে। বিশেষত, স্ক্রিপ্ট ("#! / Bin / sh -u") সম্পাদন করার সময় দোভাষীকে যে মন্তব্যটি ব্যবহার করতে হবে তা সেই মন্তব্যটিকে উপেক্ষা করা হবে, কারণ সেই অনুবাদকের পাশে তালিকাভুক্ত সমস্ত অপশনই থাকবে।

সুতরাং, আপনি এ সম্পর্কে সর্বোত্তম যা করতে পারেন তা হ'ল আপনার স্ক্রিপ্টগুলি পোর্টেবল করে তোলা, যতক্ষণ না এটি কার্যকর হয় তার কোনও দুর্দান্ত ত্যাগ নেই।

আপনি বাশ কোডিং কনভেনশনগুলি দেখতে পাবেন - স্ট্যাক ওভারফ্লো


1
"যা বলি দেওয়া হচ্ছে" ... অটোকনফ দেখুন। তারা "অরিজিনাল বোর্ন শেল" এর মতো / বিন / শকে লক্ষ্যবস্তু করেছে কারণ সমস্ত শেল বৈশিষ্ট্যগুলির (ক্ষুদ্র) সেটটিকে সমর্থন করে। এবং তারা এর জন্য ভীষণ কষ্ট পেয়েছিল।
জার্জেন এ। এয়ারহার্ড

1

আপনি প্রায় গ্যারান্টি দিতে পারেন যে একমাত্র আছে /bin/sh। এটি আসলে স্থির সংযুক্ত শেল হতে পারে, বা এটি অন্য শেলের একটি লিঙ্ক হতে পারে। অন্য শেলটি সাধারণত সনাক্ত করে যে এটিকে sh বলা হয় এবং এটি সামঞ্জস্যতা মোডে চলবে।

প্রায় প্রথম বাক্যে লক্ষ করুন ।

আমি যে সিস্টেমে কাজ করেছি তার মতো প্রতিটি ইউনিক্স এটি ছিল। তাদের মধ্যে অনেক এছাড়াও ব্যাশ ইনস্টল করেছিলেন (কিন্তু না সব তাদের। যেমন সঙ্গে bash এটি কিছু বাসদ এর ডিফল্টরূপে ইনস্টল করা নেই। কিছু লিনাক্স ডিস্ট্রিবিউশন জাহাজ , ডেবিয়ান Almquist শেল পরিবর্তে।

আপনি গ্যারান্টি দিতে পারেন তা হ'ল আপনার ইনস্টলেশন নির্দেশাবলী। আপনি README ফাইলটিতে একটি লাইন যুক্ত করতে পারেন যাতে zsh প্রয়োজন। আপনি যদি প্যাকেজ তৈরি করেন তবে zsh কে নির্ভরতা হিসাবে চিহ্নিত করতে পারেন। আপনি এটি স্বতঃসিদ্ধ / স্বয়ংক্রিয় সরঞ্জামগুলির সাহায্যে পরীক্ষা করতে পারেন। ইনস্টলেশন স্ক্রিপ্টে zsh পাওয়া গেছে কিনা তা আপনি পরীক্ষা করতে পারেন (চালিয়ে গেলে / বিন / শ দিয়ে শুরু করুন এবং জেডএস সনাক্ত করার চেষ্টা করুন, যদি ত্রুটি প্রদর্শন না করা হয়। যেমন: "সতর্কতা: জেডএসএইচ ইনস্টল করা হয়নি Please অনুগ্রহ করে ইনস্টলেশন নির্দেশ ফাইলটি পড়ুন!" "।)

আমি নিশ্চিত যে আমি আরও কয়েকটি বিকল্প ভুলে গেছি। তবে মূল বিষয়গুলি হ'ল:

  • আপনি এটির পরীক্ষা না করা পর্যন্ত কোনও কিছুর গ্যারান্টি দিতে পারবেন না।
  • আপনি প্রায় গ্যারান্টিযুক্ত যে / বিন / এস উপস্থিত আছেন এবং আপনি এটি দিয়ে কিছু পরীক্ষা করতে পারেন।

পসিক্সের জন্য / বিন / শ, এএফআইইউ প্রয়োজন। এর মতো আরও কয়েকটি যুক্তিসঙ্গত উপযোগিতা প্রয়োজন। প্রয়োজনীয়তাগুলি GNU অটোকনফিশন চেক করুন।
ভোনব্র্যান্ড

@vonbrand। পসিক্সের প্রয়োজন হয় না /bin/sh। এটি নির্দিষ্ট shপরিবেশে (যা ডিফল্ট পরিবেশ হতে হবে না) যা নির্দিষ্ট করে তার আচরণ করে। /bin/shপসিক্স শেল নাও থাকতে পারে। উদাহরণস্বরূপ সোলারিস 10 এবং তার আগে, এটি এখনও বোর্ন শেল shছিল এবং মানটি ছিল /usr/xpg4/bin
স্টাফেন চেজেলাস
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.