আমার সমস্ত স্ক্রিপ্টগুলিতে আমার কি * .sh এবং * .rb ফাইল এক্সটেনশন রাখা উচিত?


20

আমার hand HOME / bin ডিরেক্টরিতে হাতে গুটিয়ে থাকা এক্সিকিউটেবল স্ক্রিপ্টগুলির একটি গুচ্ছ রয়েছে। কিছু বাশে লেখা, কেউ রুবিতে। তাদের সবার কাছে শেল ব্যাংকের শীর্ষে শেলটি জানিয়েছে যে কী দোভাষী ব্যবহার করতে হবে (বাশ বা রুবি, আমার ক্ষেত্রে)।

আমি ভাবছি যে এই স্ক্রিপ্টগুলিতে ফাইল এক্সটেনশানগুলি দেওয়া ভাল যে তারা কোন স্ক্রিপ্টিং ভাষায় লিখিত আছে তা বোঝাতে ভাল? উদাহরণস্বরূপ, রুবির স্ক্রিপ্টগুলিতে * .rb প্রত্যয় থাকবে এবং ব্যাশগুলিতে * .শ প্রত্যয় থাকবে।

বর্তমানে, এই স্ক্রিপ্টগুলির কোনও ফাইল এক্সটেনশন ছাড়া সহজ নাম রয়েছে।

সেরা অনুশীলন কি?


1
শেবাং থেকে এক্সটেনশনে রূপান্তর করা এবং সাধারণ স্ক্রিপ্টের সাহায্যে ফিরে আসা যথেষ্ট সহজ। সুতরাং একটি চেষ্টা করে দেখুন এবং আপনার প্রয়োজনে পরে এটি ঠিক করুন।
অ্যারন জ্যা লাং

উত্তর:


9

আপনি ওয়াইল্ডকার্ড কমান্ডগুলি করতে পারেন ls *.rbবা cp *.shআপনি যদি ভবিষ্যতে আপনার স্ক্রিপ্টগুলি সংগঠিত করতে চান তবে।

আমার মতে তাড়াতাড়ি শুরু করুন বা আফসোস করুন।

পছন্দকারী সম্পাদকরা শেবাং বা ফাইল এক্সটেনশনের vimউপর ভিত্তি করে সঠিক সিনট্যাক্স হাইলাইটিং প্রয়োগ করতে সক্ষম হবেন ।

বিভিন্ন সম্পাদকের মডেলাইন ব্যবহার করে এটিও সম্পন্ন করা যায়। যেমন ভিমের জন্য:

# vim: ft=sh

2
আইএমএইচও, সংস্থাটি কার্যকরীভাবে কার্যকর করা হয়, বাস্তবায়নের বিবরণ দিয়ে নয়।
মাধ্যাকর্ষণ

4
@grawity: তবুও প্রত্যয় কুঁড়েঘর জন্য grepping চেয়ে সহজ দ্বারা সংগঠিত হয় ...
আকিরা

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

10

ভাল - জীবনের বেশিরভাগ জিনিস হিসাবে: এটি আপনার প্রয়োজনের উপর নির্ভর করে।

আপনি বলেছিলেন যে এই স্ক্রিপ্টগুলি একটি বিন ডিরেক্টরিতে থাকে এবং আমি ধরে নিয়েছি যে এই স্ক্রিপ্টগুলি কমান্ড লাইন থেকে কল করা উচিত। ব্যবহারকারী হিসাবে আমি এটিকে বিরক্তিকর হিসাবে বিবেচনা করি যদি আমাকে ব্ল্যাঙ্কস বা foo.bash টাইপ করতে হয়। এছাড়াও কোডার যদি দোভাষীকে বোধ করতে চলে যায় তবে কমান্ডের নামটিও বদলে যাবে এবং আমাকে অন্যান্য স্ক্রিপ্টগুলি সংশোধন করতে হবে যা এই সরঞ্জামগুলি ব্যবহার করে - খুব বিরক্তিকর, এমনকি ব্যবহারকারী এবং কোডার একই ব্যক্তি হলেও।

তবে অন্যদিকে আমি আমার প্রজেক্ট বিল্ড ডিরেক্টরিতে .sh বা .tcl এর মতো এক্সটেনশনগুলি ব্যবহার করি। এইভাবে আমি ফাইলগুলি তাদের গন্তব্য ডিরেক্টরিতে স্থাপন করতে বৈশিষ্ট্যগুলি ব্যবহার করতে পারি - তবে এই পর্যায়ে আমি ফাইল প্রত্যয়টি সরিয়ে ফেলি।


6

স্পষ্টতই binডিরেক্টরিতে এক্সিকিউটেবল ফাইল এবং সম্পাদনাযোগ্য "উত্স" ফাইলগুলির মধ্যে কিছু পার্থক্য রয়েছে ।

  • উত্স ফাইলগুলির জন্য, এটি প্রত্যয় রাখা সহায়ক, যাতে আপনি কী কী তা দেখতে পারেন এবং #!লাইন স্ক্যান করতে ব্যর্থ কিছু কম বুদ্ধিমান সরঞ্জামকে সহায়তা করতে পারেন ।
  • মডিউল জন্য, তারা শুধুমাত্র প্রোগ্রাম, যার সব একই ব্যাখ্যাকারী (অথবা কোন ব্যাখ্যাকারী) ব্যবহার একটি সংশ্লিষ্ট সেট ব্যবহার করছি, এবং এটি অন্তর্ভুক্ত করা সাধারণভাবে ব্যবহৃত হয় .pm, .shবা .soএই ক্ষেত্রে।
  • এক্সিকিউটেবল প্রোগ্রামগুলির জন্য, এর নামটি "প্রোগ্রামিং চুক্তির" অংশ যা ব্যবহারকারী এবং অন্যান্য স্ক্রিপ্টগুলি এটির জন্য আবেদন করে। এটি বাস্তবায়নের পরেও নামটি পরিবর্তন না হওয়া গুরুত্বপূর্ণ ; সুতরাং স্পষ্টতই ফাইলের নামটির প্রত্যয় থাকা উচিত নয়

সংকলিত প্রোগ্রামের ক্ষেত্রে, "উত্স" এবং "এক্সিকিউটেবল" এর মধ্যে পার্থক্য সুস্পষ্ট: একটিতে সোর্স কোড থাকে, অন্যটিতে মেশিন ল্যাঙ্গুয়েজ থাকে বা বাইটোকডকে ব্যাখ্যা করা হয়। স্ক্রিপ্টের ক্ষেত্রে, কোনও স্পষ্ট পার্থক্য নেই, তবে makeকমান্ডটি "স্ক্রিপ্টের উত্স কোড" এবং "একটি স্ক্রিপ্টের নির্বাহযোগ্য সংস্করণ" এর মধ্যে একটি ধারণাগত বিচ্ছেদ বজায় রাখে: "শেল স্ক্রিপ্ট" এর জন্য এটির ডিফল্ট "সংকলক" কেবল সহজ cp

আমি একটি পৃথক $HOME/sourceডিরেক্টরি রাখার সুপারিশ করব , এবং হয়:

  • একটি সিমিলিংক রাখা, যেমন তৈরি করা ln -s ../source/foo.sh $HOME/bin/foo; অথবা
  • পরিবর্তন করে (এবং সেগুলি পরীক্ষা করে) ব্যবহার করে ম্যানুয়ালি অনুলিপি করুন install -m 755 foo.sh ../bin/foo; অথবা
  • Makefileথেকে উত্স ফাইলটি অনুলিপি করার আগে একটি সিনট্যাক্স চেক সম্পাদন করতে একটি নিয়ম ব্যবহার $HOME/sourceকরে$HOME/bin

পাদটীকা: একটি শেল স্ক্রিপ্ট মডিউল অন্য শেল স্ক্রিপ্ট দ্বারা শুধুমাত্র ব্যবহারযোগ্য, এবং মডিফাই ব্যবহার স্ক্রিপ্ট অভ্যন্তরীণ প্রসঙ্গ .বা sourceবিল্ট ইন কমান্ড। এটি একটি এক্সিকিউটেবল স্ক্রিপ্ট থেকে পৃথক, যা (কোনও প্রোগ্রামের মতো) পৃথক প্রক্রিয়া হিসাবে চালিত হয় এবং এর প্যারেন্ট প্রক্রিয়াটি পরিবর্তন করতে পারে না। মোটামুটি কনভেনশন হিসাবে, মডিউলগুলি প্রবেশ করে /usr/lib/name_of_program/name_of_module.shযেখানে কমান্ডগুলি প্রবেশ করে /usr/bin/name_of_command(কোনও প্রত্যয় ছাড়াই)।


3

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


অন্যদিকে মডিউল এবং গ্রন্থাগারগুলির প্রায় সবসময়ই এক্সটেনশন থাকে ( .rbরুবি মডিউলগুলির .soজন্য, ইএলএফ ভাগ করে নেওয়া লাইব্রেরিগুলির জন্য এবং এই জাতীয়)।


প্রশ্নটি এতটা নয় যে 'কার্নেল এটি চালাতে সক্ষম হয় যদি আমি প্রত্যয়টি না সরবরাহ করি তবে' এটি কী আমাকে সাহায্য করে '। টাইপ করা অক্ষরের বৃদ্ধি সম্পূর্ণ হওয়ার সাথে অপ্রাসঙ্গিক।
আকির
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.