সমস্ত বাশ স্ক্রিপ্টগুলি কি `zsh` এর সাথে সামঞ্জস্যপূর্ণ?


63

আমি বাশ থেকে জেডএসে স্যুইচ করতে চাইছি তবে ব্যাশ স্ক্রিপ্টগুলির সামঞ্জস্যতা নিয়ে উদ্বিগ্ন।

সমস্ত বাশ স্ক্রিপ্ট / ফাংশন zsh সঙ্গে সামঞ্জস্যপূর্ণ? সুতরাং, যদি এটি সত্য হয় তবে কি zsh কেবল বাশের উন্নতি?


আমি এটি দরকারী পেয়েছি: Askubuntu.com
1577

উত্তর:


55

যদি আপনার স্ক্রিপ্টগুলি লাইন দিয়ে শুরু হয় তবে #!/bin/bashসেগুলি এখনও ব্যাশ ব্যবহার করে চালানো হবে, এমনকি যদি আপনার ডিফল্ট শেলটি zsh হয়।

আমি zsh এর বাক্য গঠনটি সত্যই বাশের একটির খুব কাছে পেয়েছি এবং সত্যিই কিছু অসুবিধাগুলি থাকলে আমি মনোযোগ দেব না। আমি 6 বছর আগে বাঁশ থেকে একচেটিয়াভাবে zsh এ চলেছি।


1
ওভার স্যুইচিংয়ের আপনার চ্যালেঞ্জিং অংশটি কী?
খ্রিস্টলি

4
কোনটিই নয়। আমার ব্যক্তিগত স্ক্রিপ্টগুলি ব্যাশের যথাযথ রেফারেন্স যুক্ত করে এবং এর সাথে শুরু করার জন্য আমি একটি ভাল .zshrc পেয়েছি। Zsh এবং বাশ যথেষ্ট মিল ছিল যা আমি সত্যিই এটি চ্যালেঞ্জিং মনে করি নি find
হিউজেনস

4
আপনি কি আপনার .zshrc:)
neaumusic

তবে #!/bin/bashস্ক্রিপ্ট ফাইলটি চললে লাইনে কি উপেক্ষা করা হবে source ./script.sh?
এলসিবি

3
শেলটির পথটিকে হার্ড-কোডিং করা খারাপ পরামর্শ, যদিও এটি প্রায়শই করা হয়। #!/usr/bin/env bashপরিবর্তে আপনার ব্যবহার করা উচিত , বিশেষত ম্যাকোএসে, যেখানে ডিফল্ট ব্যাশ মারাত্মকভাবে পুরানো এবং নতুন সংস্করণ কার্যত সর্বদা আলাদা পথে ইনস্টল থাকে।
কনরাড রুডলফ

29

আপনি যদি ডান এমুলেশন মোডে ( emulate shবা emulate ksh) রাখেন তবে Zsh সর্বাধিক বোর্ন, পসিক্স বা ksh88 স্ক্রিপ্ট চালাতে পারে । এটি ব্যাশ বা ksh93 এর সমস্ত বৈশিষ্ট্য সমর্থন করে না। Zsh এর ব্যাশের বেশিরভাগ বৈশিষ্ট্য রয়েছে তবে বেশিরভাগ ক্ষেত্রে আলাদা সিনট্যাক্স রয়েছে।

আপনি যে শেলটি ইন্টারেক্টিভভাবে ব্যবহার করেন তা আপনার যে কোনও স্ক্রিপ্টের জন্য অপ্রাসঙ্গিক। স্ক্রিপ্টগুলি চালিত শেলটি প্রথম লাইনে শেবাং লাইনটিতে নির্দেশিত একটি indicated উদাহরণস্বরূপ, যদি স্ক্রিপ্টটি শুরু হয় #!/bin/bash, তবে এটি ব্যাশ দ্বারা কার্যকর করা হবে।

আপনি ব্যাশ কাস্টমাইজড করে থাকেন, তবে আপনি শুধু আপনার নামান্তর পারবে না .bashrcকরতে .zshrc। কিছু জিনিস ভাগ করা যেতে পারে, উদাহরণস্বরূপ উপকরণ এবং ফাংশন, যতক্ষণ না আপনি দুটি শেলের মধ্যে ছেদটি আটকে থাকবেন (ছেদটি ksh88 এবং pdksh এর কাছাকাছি )। অন্যান্য জিনিস, যেমন প্রম্পট সেটিংস, সমাপ্তির ফাংশন এবং সর্বাধিক বিকল্পগুলির সম্পূর্ণরূপে নতুন করে লেখা দরকার।

মানুষ তাদের থেকে সোর্স করার জন্য আপনাকে একটি স্নিপেট লেখার তাহলে .bashrcবা .zshrcএবং আপনি দুটি সংস্করণ বজায় রাখার জন্য ব্যাশ এবং zsh বৈশিষ্ট্য একটি সাধারণ উপসেট, যা ব্যাশ প্রোগ্রামিং বৈশিষ্ট্য অন্তর্ভুক্ত করা হয়েছে বিদ্ধ করতে চাই না। আপনার পুরো কোডটি ফাংশনে রাখুন এবং প্রতিটি ফাংশনের শীর্ষে নীচের লাইনটি দিন:

if [ -n "$ZSH_VERSION" ]; then emulate -L ksh; fi

আপনি প্লেইন এস সি সিনট্যাক্সের কাছাকাছি হওয়ার emulate shপরিবর্তে ব্যবহার করতে পারেন emulate kshযা আপনার প্রয়োজন .profile

যদি কোনও ফাংশন অন্য ফাংশনটিকে কল করে, অন্য ফাংশনটি অনুকরণকারী সেটিংটি উত্তরাধিকার সূত্রে প্রাপ্ত হয়, সুতরাং আপনাকে কেবল শেষ ব্যবহারকারী দ্বারা ডাকা ফাংশনগুলিতে অভ্যন্তরীণ ফাংশনে এই লাইনটি লাগানোর দরকার নেই।


1
আপনি যদি স্ক্রিপ্টগুলি চালনা করেন তবে আপনি যে শেলটি ব্যবহার করছেন তা অপ্রাসঙ্গিক ./my_script.shsource my_script.shএবং . my_script.shএটি চালাবে এটি কোনও শ্যাবাং উপেক্ষা করে বর্তমান শেল হিসাবে রয়েছে।
বলপয়েন্টবেন

3

যদি শেবাং হয় #!/bin/bashএবং আপনি স্ক্রিপ্টটি শুরু করেন ./scriptতবে স্ক্রিপ্টটি বাশ দ্বারা কার্যকর করা হবে। একেবারে এখানে কোন সমস্যা নেই।

যাইহোক, আপনি যদি চালানো zsh উদাহরণটিতে এটি চালিত করেন zsh ./scriptবা উত্স করেন তবে . ./scriptএটি খুব সাধারণ যে বাশ এবং zsh এর বাক্য গঠনটি মেলে না।

উদাহরণস্বরূপ, zsh ডিফল্টরূপে প্যারামিটারের বিস্তৃতি বিভক্ত করে না, বাশের একটি সহায়তা অন্তর্নির্মিত থাকে, read -p promptzsh তে কোনও কিছুই নেই (সিনট্যাক্সটি খুব আলাদা পড়তে হবে cmd \? প্রম্পট , arrays start on 1 (not 0) in zsh,কমান্ড only search for external commands in zsh, or there is no (simple) equivalent to{oo foo ^} `(বড় আকারের প্রথম অক্ষর) zsh তে এটি অন্যদের মধ্যে রয়েছে This এটি (বেশিরভাগ ক্ষেত্রে) মিল এবং কিছু পার্থক্যের দীর্ঘ তালিকা ।

কিছু ক্ষেত্রে, zsh অন্যান্য শাঁস অনুকরণ করতে বলা যেতে পারে। কিছু ক্ষেত্রে, উভয় শেলের পক্ষে পোর্টেবল কোনও সাধারণ সিনট্যাক্স নেই (পোর্টেবল সলিউশন অনুকরণের জন্য এলিয়াস বা ফাংশন ব্যবহার না করে)।

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

  1. প্রো zsh

    • কমান্ড সিনট্যাক্স অপশনটি একটি ট্যাব টিপতে দেখতে পারা খুব সুন্দর।
    • আপনি টাইপ করার সময় zsh এর আর একটি বড় সুবিধা ত্রুটি সংশোধন। কেবল ত্রুটি প্রদর্শন করার পরিবর্তে: কমান্ড পাওয়া যায় নি, zsh আপনি টাইপ করার চেষ্টা করেছেন তা ব্যাখ্যা করার চেষ্টা করবে। zsh এই ইনপুটটিকে বৈধ কমান্ড হিসাবে স্বীকার করবে।
    • এছাড়াও, zsh এর বিস্তারে অনেকগুলি সংশোধক রয়েছে যা বিস্তৃত সমাধানের মঞ্জুরি দেয়। পছন্দ: কেবলমাত্র ফাইলগুলি তালিকাভুক্ত করুন: ls *(.)(যা অন্যান্য শাঁসের সাথে জটিল)। এমনকি গভীরভাবে তাকানোর পরেও উত্তর zsh ( print -rl -- *(/)) এ জটিল হয়ে যায়
    • ভাসমান (কিছু ক্যাভ্যাট সহ) সহ গণিত গ্রহণ করুন।
  2. কন zsh:

    • আরও অনেক সিস্টেমে বাশ ডিফল্ট শেল।
    • অনেক zsh বিকল্প সরাসরি ব্যাশ সামঞ্জস্যপূর্ণ স্ক্রিপ্ট লিখতে সহায়তা করে না।
    • এমনকি একই সময়ে দুটি শাঁস শেখার চেষ্টা করে এটি একটি বড় সমস্যা হয়ে উঠতে পারে।

শেষ পর্যন্ত, এটি আপনার পছন্দ এবং আমি সবসময় আরও পছন্দ পছন্দ করি।

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