Zsh এবং mksh বাশের সাথে বেমানান কোথায়?


11

অন্যান্য পসিক্স-সামঞ্জস্যপূর্ণ শেলগুলি ব্যাশের জন্য যুক্তিসঙ্গত প্রতিস্থাপন হিসাবে কতটা কার্য করতে পারে? তাদের সত্যিকারের "ড্রপ-ইন" প্রতিস্থাপন হওয়ার দরকার নেই, তবে বেশিরভাগ স্ক্রিপ্টগুলির সাথে কাজ করার জন্য এবং কিছু সংশোধন করে বাকী সমর্থন করার জন্য পর্যাপ্ত পরিমাণে বন্ধ করুন ।

  1. আমি সুস্পষ্ট বাশ স্ক্রিপ্টগুলি রাখতে চাই - ইনস্ক্রিপ্টস, ডিএইচসিপি ক্লায়েন্ট স্ক্রিপ্টস ইত্যাদি - সর্বনিম্ন সংশোধন নিয়ে কাজ করুন

  2. আমি চাই আমার নিজস্ব আরও শেল স্ক্রিপ্টগুলির সংগ্রহ খুব বেশি সংশোধন করার দরকার নেই

  3. আমি স্ট্রিং ম্যানিপুলেশন এবং বিল্ট-ইন রেজেক্স প্যাটার্ন মিলের মতো বৈশিষ্ট্যগুলি পেতে চাই

আমি জানি কেবলমাত্র গুরুতর প্রতিযোগী হলেন zsh এবং mksh। সুতরাং, আপনারা যারা এখানে আছেন তাদের জন্য যারা উভয়ই বা উভয়ের সাথেই ভাল:

  1. বাশের যথাক্রমে zsh এবং mksh এর কোন বৈশিষ্ট্য নেই?

  2. শেলগুলি বাশের সাথে কী কী বৈশিষ্ট্য ভাগ করে, তবে এর জন্য বেমানান সিনট্যাক্স ব্যবহার করে?


3
কমান্ড শেল তুলনা: ( en.wikipedia.org/wiki/Comparison_of_command_shells ) ব্যাশ স্ক্রিপ্টিং করতে উন্নত নির্দেশিকা: ( tldp.org/LDP/abs/html ) ম্যানুয়াল ZSH: ( zsh.sourceforge.net/Guide/zshguide.html ) MirBSD শেল ম্যানুয়াল: ( mirbsd.org/htman/i386/man1/mksh.htm )। আমি দুঃখিত, কিন্তু এই প্রশ্নটি খুব জটিল। সম্ভবত আপনাকে জিজ্ঞাসা করা উচিত যে আপনার লিনাক্সের নির্দিষ্ট বিতরণের জন্য দুর্বলতাটি ঠিক করতে বাশকে কীভাবে প্যাচ করবেন?
টাইলার ম্যাগিনিস

3
এমন কোনও শেল নেই যা প্রতিস্থাপনের জন্য ড্রপ হিসাবে কাজ করতে পারে bash, mksh এবং zsh /bin/shবিভিন্ন স্তরের নির্ভুলতার মতো কাজ করতে পারে , তবে তা নয় bash
llua

1
পুরো শেলশকের জিনিসটির মূল প্রশ্নের সাথে কোনও সম্পর্ক নেই বলে মনে হচ্ছে এবং এটি কেবল মানুষকে বিভ্রান্ত করছে, তাই আমি এটিকে সরিয়ে দিয়েছি
মাইকেল মরোজেক

3
পুরো প্রশ্ন অত্যধিক বিস্তৃত। সম্ভবত আপনি এটি অপসারণ করা উচিত।
টাইলার ম্যাগনিনিস

1
আমার একমাত্র উদ্বেগের বিষয় হ'ল ফ্যাস সফটওয়্যার ফাউন্ডেশন (এফএসএফ) দ্বারা বাস ভালভাবে রক্ষণাবেক্ষণ করা হয়েছে। সেখানে আমার পরিচিতিগুলি আমাকে বলে যে BASH এর মধ্যে "মৌলিক ত্রুটি" এর উদ্ঘাটন কেবল একটি শক্তিশালী, আরও সুরক্ষিত বাস্তবায়নের দিকে পরিচালিত করবে। এমন অনেকগুলি বিকল্প শেল রয়েছে যা আপনার প্রয়োজনের জন্য একটি সুপারিশ করতে শুরু করে, আপনার ব্যবহারের ক্ষেত্রে আমার একটি দৃ understanding় ধারণা প্রয়োজন। তারপরে ও / এস দিকে ... এতগুলি জিনিস বাশের সাথে আবদ্ধ হয়েছে যাতে আপনি আপনার সম্পূর্ণ ও / এস কলগুলিকে পুনরায় লিখতে পারেন বাসে। আমি দেখতে পাচ্ছি সেরা সমাধানটি হ'ল রক্ষণাবেক্ষণ করা ওয়েল শেল সহ একটি বিতরণ চয়ন করা।
টাইলার ম্যাগিনিস 18

উত্তর:


19

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

ব্যাশের নিকটতম জিনিসটি এটিটি কেএস ৯৯ বা ম্যাক্স (কর্ন শেল এবং একটি ক্লোন) হবে। জেডএসের বৈশিষ্ট্যগুলির একটি উপসেট রয়েছে তবে আপনার এটি zsh নেটিভ মোডে নয়, ksh এমুলেশন মোডে চালানো দরকার।

আমি পসিক্স বৈশিষ্ট্যগুলি (যা কোনও আধুনিক shশেলের মধ্যে উপলব্ধ ), না তুলনামূলকভাবে অস্পষ্ট বৈশিষ্ট্যগুলি বা ইন্টারেক্টিভ ব্যবহারের জন্য উপরে উল্লিখিত বৈশিষ্ট্যগুলি হিসাবে তালিকাবদ্ধ করব না। ডেবিয়ান হুইজি হিসাবে পাওয়া পর্যবেক্ষণগুলি বশ ৪.২, কেএস ৯৩ ইউ এবং ম্যাক্স ৪০.৯.২০১২০630০ অনুসারে বৈধ।

শেল সিনট্যাক্স

বরাত দিয়ে

$'…'(ব্যাকস্ল্যাশ ইন্টারপোলেশন সহ আক্ষরিক স্ট্রিং) ksh93 এবং mksh এ উপলব্ধ। `$"… "(অনুবাদিত স্ট্রিং) বাশ-নির্দিষ্ট।

শর্তসাপেক্ষে নির্মাণ

মিক্স এবং ksh93 ;&একটি caseবিবৃতিতে পড়তে হয়েছে, তবে ;;&পরবর্তী কেসগুলি পরীক্ষা করার জন্য নয় । মাকশ এর ;|জন্য রয়েছে এবং সাম্প্রতিক মিক্স ;;&সামঞ্জস্যতার অনুমতি দেয় ।

((…))পাটিগণিতের এক্সপ্রেশন এবং [[ … ]]পরীক্ষাগুলি হ'ল ksh বৈশিষ্ট্য। কিছু শর্তাধীন অপারেটর পৃথক, নীচে "শর্তসাপেক্ষ অভিব্যক্তি" দেখুন।

Coprocesses

Ksh এবং বাশ উভয়েরই কপোরেসেস রয়েছে তবে তারা আলাদাভাবে কাজ করে।

ক্রিয়াকলাপ

Mksh এবং ksh93 function name {…}স্ট্যান্ডার্ড ছাড়াও ফাংশন সংজ্ঞাগুলির জন্য সিনট্যাক্সকে সমর্থন করে name () {…}তবে functionksh এ ব্যবহার করে স্কোপিংয়ের নিয়ম পরিবর্তিত হয়, সুতরাং name () …সামঞ্জস্যতা বজায় রাখতে আঁকড়ে থাকুন। ফাংশন নামের অনুমোদিত অক্ষরগুলির নিয়মগুলি পৃথক হয়; আলফানিউমেরিকস এবং লেগে থাকা _

বন্ধনী সম্প্রসারণ

Ksh93 এবং mksh সমর্থন বন্ধনী সম্প্রসারণ {foo,bar}। Ksh93 সংখ্যাযুক্ত রেঞ্জগুলিকে সমর্থন {1..42}করে তবে ম্যাক্স তা সমর্থন করে না।

প্যারামিটার সম্প্রসারণ

Ksh93 এবং mksh সমর্থন সাবস্ট্রিং নিষ্কাশন ${VAR:offset}এবং ${VAR:offset:length}, কিন্তু না কেস মত ভাঁজ ${VAR^}, ${VAR,}ইত্যাদি আপনার সাথে ক্ষেত্রে রূপান্তর করতে পারি না typeset -lএবং typeset -uউভয় ব্যাশ ও ksh হবে।

তারা ${VAR/PATTERN/STRING}বা এর সাথে প্রতিস্থাপন সমর্থন করে ${VAR/PATTERN//STRING}। STRING এর উদ্ধৃতি বিধিগুলি কিছুটা পৃথক, সুতরাং STRING এ ব্যাকস্ল্যাশগুলি (এবং সম্ভবত অন্যান্য অক্ষরগুলি) এড়িয়ে চলুন (একটি পরিবর্তনশীল তৈরি করুন এবং ${VAR/PATTERN/$REPLACEMENT}প্রতিস্থাপনে উদ্ধৃতি অক্ষর থাকলে পরিবর্তে ব্যবহার করুন)।

এরে সম্প্রসারণ ( ${ARRAY[KEY]}, "${ARRAY[@]}", ${#ARRAY[@]}, ${!ARRAY[@]}) ksh মত ব্যাশ করছি না।

${!VAR}বিস্তৃত ${OTHERVAR}যখন মান VARহয় OTHERVAR(পরোক্ষ পরিবর্তনশীল রেফারেন্স) ব্যাশ-নির্দিষ্ট (ksh সঙ্গে ভিন্ন কিছু নেই ${!VAR})। Ksh এ এই দ্বিগুণ প্রসারণ পেতে আপনার পরিবর্তে নামের রেফারেন্স ব্যবহার করতে হবে ( typeset -n VAR=OTHERVAR; echo "$VAR")। ${!PREFIX*}একই কাজ করে।

প্রক্রিয়া প্রতিস্থাপন

প্রক্রিয়া প্রতিস্থাপন <(…)এবং >(…)mshh এ নয় ksh93 এ সমর্থিত।

ওয়াইল্ডকার্ডের নিদর্শন

Ksh প্রসারিত গ্লোব নিদর্শনগুলি যা shopt -s extglobব্যাশে সক্রিয় করার প্রয়োজন তা সবসময় ksh93 এবং mksh এ উপলব্ধ।

মাকশ চরিত্রের শ্রেণীর মতো সমর্থন করে না [[:alpha:]]

আইও পুনঃনির্দেশ

বাশ এবং ksh93 সিউডো-ফাইলগুলি সংজ্ঞায়িত করে এবং , কিন্তু ম্যাক্স তা দেয় না।/dev/tcp/HOST/PORT/dev/udp/HOST/PORT

স্ক্রিপ্টগুলিতে পুনর্নির্দেশে ওয়াইল্ডকার্ডগুলি প্রসারিত করা (যেমন ফাইলের নামটি প্যাটার্নের সাথে একমাত্র মিল হিসাবে var="*.txt"; echo hello >$aলিখিতভাবে লেখা a.txt) বাশ-নির্দিষ্ট বৈশিষ্ট্য (অন্যান্য শেলগুলি স্ক্রিপ্টগুলিতে কখনও তা করে না)।

<<< এখানে স্ট্রিংগুলি ব্যাশের মতো ksh এ কাজ করে।

>&সিনট্যাক্স ত্রুটিগুলি পুনর্নির্দেশের শর্টকাটটিও mksh দ্বারা সমর্থিত তবে ksh93 দ্বারা নয়।

শর্তাধীন অভিব্যক্তি

[[ … ]] ডাবল বন্ধনী সিনট্যাক্স

Ksh থেকে ডাবল ব্র্যাকেট সিনট্যাক্স উভয় এটিটি ksh93 এবং ব্যাশের মতো ম্যাক্স দ্বারা সমর্থিত।

ফাইল অপারেটর

Ksh93, mksh এবং bash POSIX- তে একই এক্সটেনশানগুলিকে সমর্থন করে, যার -aএকটি অপ্রচলিত প্রতিশব্দ -e, -k(স্টিকি), -G(ইজিডের মালিকানাধীন), -O(ইউইডির মালিক), -ef(একই ফাইল), -nt(এর চেয়ে -otপুরানো) এর চেয়ে বড় রয়েছে including

-N FILE (সর্বশেষ পঠনের পর থেকে সংশোধিত) এমএক্সএইচ দ্বারা সমর্থিত নয়।

মিকসের কাছে একটি রেজিপ্যাক্স ম্যাচিং অপারেটর নেই =~। Ksh93 এর এই অপারেটরটি রয়েছে এবং এটি ব্যাশের মতো একই ম্যাচটি সম্পাদন করে তবে এর BASH_REMATCHসাথে মিলে যাওয়া গ্রুপগুলি পুনরুদ্ধার করার সমতুল্য নেই ।

স্ট্রিং অপারেটর

Ksh93 এবং mksh একই স্ট্রিং তুলনা অপারেটর <এবং >বাশ পাশাপাশি এর ==প্রতিশব্দ হিসাবে সমর্থন করে =। মিক্স অভিধান সংক্রান্ত ক্রম নির্ধারণের জন্য স্থানীয় সেটিংস ব্যবহার করে না, এটি স্ট্রিংকে বাইট স্ট্রিংগুলির সাথে তুলনা করে।

অন্যান্য অপারেটর

-v VARকোনও ভেরিয়েবল সংজ্ঞায়িত করা হয়েছে তা পরীক্ষা করতে বাশ-নির্দিষ্ট। যে কোনও পসিক্স শেল, আপনি ব্যবহার করতে পারেন [ -z "${VAR+1}" ]

Builtins

alias

ওরফে নামগুলিতে অনুমোদিত অক্ষরের সেটটি সমস্ত শেলের ক্ষেত্রে একই নয়। আমি মনে করি এটি ফাংশনগুলির জন্য একই (উপরে দেখুন)।

builtin

Ksh93 এর একটি বিল্টিন নামে পরিচিত builtin, তবে এটি বিল্ট-ইন কমান্ড হিসাবে কোনও নাম কার্যকর করে না। commandএলিয়াস এবং ফাংশনগুলিকে বাইপাস করতে ব্যবহার করুন ; এটি উপস্থিত থাকলে একটি বিল্টিনকে কল করবে, অন্যথায় একটি বাহ্যিক আদেশ (আপনি এটি এড়াতে পারেন PATH= command error_out_if_this_is_not_a_builtin)।

caller

এটি বাশ-নির্দিষ্ট। আপনার সাথে একটি অনুরূপ প্রভাব পেতে পারেন .sh.fun, .sh.fileএবং .sh.linenoksh93 হবে। মিক্সে শেষ আছে LINENO

declare, local,typeset

declareksh's এর জন্য বাশ-নির্দিষ্ট নাম typeset। ব্যবহার করুন typeset: এটি ব্যাশে কাজ করে।

মিক্স localএকটি উপাধিকার হিসাবে সংজ্ঞা দেয় typeset। Ksh93- এ আপনাকে ব্যবহার করতে হবে typeset(বা একটি উপনাম সংজ্ঞায়িত করতে হবে )।

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

আমি মনে করি না যে typeset -tksh এ বাশের (ট্রেস ফাংশন) এর সঠিক সমতুল্য আছে ।

cd

Ksh93 নেই -e

echo

Ksh93 এবং mksh বাশ-এর ​​মতো বিকল্পগুলি -eএবং -nবিকল্পগুলি প্রক্রিয়া করে । মাকশ আরও বোঝে -E, ksh93 এটিকে বিকল্প হিসাবে বিবেচনা করে না। ব্যাকস্ল্যাশ প্রসারণটি ডিফল্টরূপে ksh93 এ বন্ধ আছে, mksh এ ডিফল্টরূপে।

enable

Ksh বিল্টিন কমান্ডগুলি অক্ষম করার কোনও উপায় সরবরাহ করে না। একটি বিল্টিন এড়ানোর জন্য, বাহ্যিক কমান্ডের পথটি দেখুন এবং এটিকে স্পষ্টভাবে প্রার্থনা করুন।

exec

Ksh93 আছে -aতবে নেই -l। মক্ষেরও নেই।

export

Ksh93 বা mksh নেই export -ntypeset +x fooপরিবর্তে ব্যবহার করুন, এটি ব্যাশ এবং ksh এ কাজ করে।

Ksh পরিবেশের মাধ্যমে ফাংশন রফতানি করে না।

let

let বাশ এবং কেএসএ তে একই।

mapfile, readarray

এটি ব্যাশ-নির্দিষ্ট বৈশিষ্ট্য। আপনি while readকোনও ফাইল পড়তে লুপস বা কমান্ড প্রতিস্থাপন ব্যবহার করতে পারেন এবং এটিকে লাইনের একটি অ্যারে বিভক্ত করতে পারেন। যত্ন নিন IFSএবং গ্লোববিং করুন। এখানে এর সমতুল্য mapfile -t lines </path/to/file:

IFS=$'\n'; set -f
lines=($(</path/to/file))
unset IFS; set +f

printf

printfখুব অনুরূপ। আমি মনে করি ksh93 বাশের সমস্ত ফর্ম্যাট নির্দেশকে সমর্থন করে। mksh সমর্থন করে না %qবা %(DATE_FORMAT)T; কিছু ইনস্টলেশনে, printfকোনও ম্যাক্স বিল্টিন নয় এবং এর পরিবর্তে বাহ্যিক কমান্ডটি কল করে।

printf -v VAR বাশ-নির্দিষ্ট, ksh সর্বদা স্ট্যান্ডার্ড আউটপুট প্রিন্ট করে।

read

রিডলাইন সম্পর্কিত সমস্তগুলি সহ বেশ কয়েকটি বিকল্প বাশ-নির্দিষ্ট। অপশন -r, -d, -n, -N, -t, -uব্যাশ, ksh93 এবং mksh মধ্যে অভিন্ন।

readonly

আপনি Ksh93 এ কেবল পঠনযোগ্য হিসাবে একই ভেরিয়েবল এবং একই সিনট্যাক্স সহ mksh হিসাবে ঘোষিত করতে পারেন। যদি ভেরিয়েবলটি একটি অ্যারে হয় তবে আপনাকে প্রথমে এটি নির্ধারণ করতে হবে, তারপরে এটিকে কেবল পঠনযোগ্য করে তুলুন readonly VAR। ফাংশনগুলি কেবল ksh এ পঠনযোগ্য করা যায় না।

set, shopt

সমস্ত বিকল্প setএবং set -oএর মধ্যে পসিক্স বা কেএসএস বৈশিষ্ট্য রয়েছে।

shoptবাশ-নির্দিষ্ট অনেকগুলি বিকল্প যেভাবেই ইন্টারেক্টিভ ব্যবহারের বিষয়ে উদ্বেগ প্রকাশ করে। কিছু বিকল্প দ্বারা সক্ষম গ্লোব্বিং এবং অন্যান্য বৈশিষ্ট্যগুলির উপর প্রভাবগুলির জন্য, নীচে বিভাগ "বিকল্পগুলি" দেখুন।

source

এই রূপটি .ksh তেও বিদ্যমান। বাশ এবং ম্যাক্সে, sourceপরে বর্তমান ডিরেক্টরিটি অনুসন্ধান করে PATHতবে ksh93-তে এটি একটি সমতুল্য সমতুল্য .

trap

DEBUGসিউডো-সংকেত mksh বাস্তবায়িত হয় না। Ksh93 এ, তথ্য প্রতিবেদন করার বিভিন্ন উপায়ে এটি উপস্থিত রয়েছে, বিশদগুলির জন্য ম্যানুয়ালটি দেখুন।

type

Ksh এ, এর typeজন্য একটি উপনাম whence -v। মিক্সে, type -pএক্সিকিউটেবলের জন্য পাথ প্রিন্ট করে না, তবে একটি মানব-পঠনযোগ্য বার্তা; whence -p COMMANDপরিবর্তে আপনার প্রয়োজন ।

বিকল্প

shopt -s dotglob - গ্লোববিংয়ে ডট ফাইলগুলি উপেক্ষা করবেন না

dotglobKsh93 এ বিকল্পটি অনুকরণ করতে, আপনি সেট করতে পারেন FIGNORE='@(.|..)'। আমি মনে করি না মিক্সে এর মতো কিছু আছে।

shopt -s extglob - ksh বর্ধিত গ্লোব নিদর্শন

extglobবিকল্প ksh উপর সবসময় কার্যকরভাবে হয়।

shopt -s failglob - যদি কোনও গ্লোব প্যাটার্ন কোনও কিছুর সাথে মেলে না তবে ত্রুটি out

আমি মনে করি না এটি mksh বা ksh93 এর মধ্যে বিদ্যমান। এটা তোলে zsh মধ্যে আছে (ডিফল্ট আচরণ যদি না null_globবা csh_null_globসেট)।

shopt -s globstar**/পুনরাবৃত্ত গ্লোববিং

Ksh93 এর সাথে পুনরাবৃত্তিমূলক গ্লোববিং রয়েছে **/, এটি সক্ষম করা হয়েছে set -G। মিক্সের পুনরাবৃত্ত গ্লোববিং নেই।

shopt -s lastpipe - প্যারেন্ট শেলটিতে পাইপলাইনের শেষ কমান্ডটি চালান

Ksh93 সর্বদা প্যারেন্ট শেলের একটি পাইপলাইনের শেষ কমান্ড চালায়, যার জন্য ব্যাশে lastpipeবিকল্প সেট করার প্রয়োজন হয় । মিক্স সর্বদা সাবসিলে পাইপলাইনের সর্বশেষ কমান্ড চালায়।

shopt -s nocaseglob, shopt -s nocasematch- কেস-সংবেদনশীল নিদর্শন

মিকসের কেস-সংবেদনশীল প্যাটার্নের মিল নেই। Ksh93 এটি একটি প্যাটার্ন-বাই-প্যাটার্ন ভিত্তিতে সমর্থন করে: সাথে প্যাটার্নটির উপসর্গ করুন ~(i)

shopt -s nullglob - নিদর্শনগুলি প্রসারিত করুন যা কোনও ফাইলের সাথে খালি তালিকার সাথে মেলে না

মাকসের কাছে এটি নেই। Ksh93 এটি একটি প্যাটার্ন-বাই-প্যাটার্ন ভিত্তিতে সমর্থন করে: সাথে প্যাটার্নটির উপসর্গ করুন ~(N)

ভেরিয়েবল

স্পষ্টতই বেশিরভাগ BASH_xxxভেরিয়েবলের ksh তে বিদ্যমান নেই। $BASHPIDব্যয়বহুল তবে পোর্টেবলের সাথে অনুকরণ করা যেতে পারে sh -c 'echo $PPID'এবং সম্প্রতি ম্যাক্সে যুক্ত করা হয়েছে। BASH_LINEহয় .sh.linenoksh93 এবং LINENOmksh হবে। BASH_SUBSHELLহয় .sh.subshellksh93 হবে।

Mksh এবং ksh93 উভয়ই সূচনা করে যে ফাইলগুলি ENVশুরু হয়।

EUIDএবং UIDksh93 তে বিদ্যমান নেই। মাক্স তাদের ডাকে USER_IDএবং KSH_UID; এটা নেই GROUPS

FUNCNAMEএবং FUNCNESTksh এ বিদ্যমান নেই। Ksh93 আছে .sh.funএবং .sh.level। ঘোষিত ক্রিয়াকলাপগুলির সাথে function foo { …; }(কোনও বন্ধনী নেই!) এর নিজস্ব নাম রয়েছে $0

GLOBIGNOREksh93 এ বিদ্যমান তবে একটি আলাদা নাম এবং বাক্য গঠন সহ: এটি বলা হয়ে থাকে FIGNOREএবং এটি একটি একক প্যাটার্ন, কোলন-বিভক্ত তালিকা নয়। একটি @(…|…)প্যাটার্ন ব্যবহার করুন । FIGNOREসম্পূর্ণ আলাদা সিনট্যাক্স সহ Ksh এর সাবমিশম ব্যাশ।

Ksh93 এবং mksh মত কিছুই নেই HOSTTYPE, MACHTYPEএবং OSTYPE। তাছাড়াও SHELLOPTSবা TIMEFORMAT

মিক্স আছে PIPESTATUS, কিন্তু ksh93 নেই।

মক্ষ এবং ksh93 আছে RANDOM


আপনি যদি বাক্যটির শুরুতে (নিবন্ধভুক্ত) ট্রেডমার্ক “এমএক্সএইচ” সঠিকভাবে পুনরুত্পাদন করতে না চান ( এখানে "" ডিডি। "" বনাম "" ডিডি "।" এখানে দেখুন ) দয়া করে লিখুন "দ্য মিরবিএসডি পরিবর্তে কর্ন শেল ”। "Mksh" এর কোনও অক্ষরকে মূলধন করা সর্বদা ভুল । ধন্যবাদ।
মীরাবিলোস

কিভাবে $BASHPIDঅনুকরণ করা যায় sh -c 'echo $PPID'? আমি (sh -c 'echo $PPID')ব্যাশে চেষ্টা করেছি কিন্তু এটি আমাকে একই পিআইডি দেয় $$
ফ্র্যাঙ্কলিন ইউ

আমি ভাল প্রশ্ন তড়কা মনে এখানে । আমি প্রশ্নটি এখানে অনুলিপি করেছি।
ফ্রাঙ্কলিন ইউ

4

এই প্রশ্নটি বরং খুব বিস্তৃত।

উভয় mksh এবং zsh শাঁস যে অনেকটা সমর্থন করেন গনুহ ব্যাশ -specific এক্সটেনশন, কিন্তু সবসময় কিছু যে বোঝা যায় না হয়।

zsh আরও স্টাফ সমর্থন করে, তবে কেবল তার নেটিভ zsh মোডে, যা POSIX শেলগুলির সাথে সামঞ্জস্যপূর্ণ নয় (যেমন GNU ব্যাশ, এটিএন্ডটি ksh93 , mksh)। এছাড়াও, ম্যাক্স অনেক ঝোঁক এবং দ্রুত এবং আরও বহনযোগ্য।

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

দাবি অস্বীকার: আমি ম্যাক বিকাশকারী।


1

শেলগুলির সাথে জেডএসএইচ তুলনা

সাম্প্রতিক বছরগুলিতে এক্সটেনশনগুলিতে অবশ্য নির্দিষ্ট পরিমাণের ক্রসওভার হয়েছে। Zsh (3.1.6 হিসাবে) এর সাথে বাশের ash ${var/old/new}' feature for replacing the text old with the text new in the parameter $var. Note one difference here: while both shells implement the syntax{var / # পুরাতন / নতুন} 'এবং ${var/%old/new}' for anchoring the match of old to the start or end of the parameter text, respectively, in zsh you can't put the#' বা %' inside a parameter: in other words{var / $ পুরাতন / নতুন} রয়েছে যেখানে #' treats that as an ordinary character in zsh, unlike bash. To do this sort of thing in zsh you can use (from 3.1.7) the new syntax for anchors in any pattern,স্ট্রিংয়ের শুরুর সাথে মিলে যাওয়ার জন্য পুরানো একটি (# গুলি) দিয়ে শুরু হয় , এবং match (# ই) 'শেষের সাথে মেলে। এগুলির জন্য সেট করতে EXTENDED_GLOB বিকল্পের প্রয়োজন।

আমি ম্যাক্সের সাথে সর্বাধিক অপরিচিত, তাই উত্তরটি কোথায় খুঁজতে হবে তা আমি জানি না।

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

পার্লের মতো একটি ভাষা ইনপুটগুলিকে আরও সুরক্ষিতভাবে পরিচালনা করে। তবে রক্ষণাবেক্ষণ এখানে মূল কী। পার্ল শেল প্রতিস্থাপন খুব ভাল গ্রহণ করা হয় না। ইনপুটগুলি সুরক্ষিতভাবে পরিচালনা করা শেল রক্ষণাবেক্ষণকারীর দায়িত্ব। সুতরাং আপনি যখন স্ক্রিপ্ট লিখবেন, যাচাই করুন, যাচাই করুন, যাচাই করুন! প্রতিবার সঠিক ফলাফলের নিশ্চয়তা দেওয়ার জন্য কোড চুক্তি ব্যবহার করুন!

পার্ল শেল

শেল শক এফএসএফ বিবৃতি


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

1
বাশ প্রকল্পটি 10 ​​বছরে 1 0-দিনের শোষণ করেছে। মাইক্রোসফ্ট উইন্ডোজ প্রতি সপ্তাহে সমস্ত 0-দিনের উপরে 10 টি শোষণের উপরে রয়েছে wards আপনি কি জানেন যে কতজন লোক এ সম্পর্কে বাশ উন্নয়ন দলকে বিরক্ত করেছে? শুধু এটি আপডেট করুন এবং এগিয়ে যান! এটা কোন বড় চুক্তি.
টাইলার ম্যাগিনিস 20

1
@ DanL4096। ভেরিয়েবলগুলি শেল স্ক্রিপ্টগুলিতে পাস করা যা ভেরিয়েবলগুলিতে পর্যাপ্ত পরিমাণে স্যানিটি পরীক্ষা না করে পসিক্স ছুঁড়ে দেওয়ার কোনও কারণ নেই। সমস্যাটি সেই ব্যক্তির সাথেই থাকে যে শেল স্ক্রিপ্টটি প্রথম স্থানে লিখেছিল।
fpmurphy

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