একটি স্ক্রিপ্ট বিতরণ: আমি কি শেবাংয়ের জন্য / বিন / গাওক বা / ইউএসআর / বিন / গাওক ব্যবহার করব?


12

সাধারণত গিঁটে / বিন বা / ইউএসআর / বিন হয়? আমি সাথে যেতে হবে #!/usr/bin/env gawkতবে আমি যুক্তি ব্যবহার করতে পারবেন না। এখনই আমি ব্যবহার করছি #!/bin/gawk -f। স্ক্রিপ্টটি খুব দীর্ঘ এবং এতে প্রচুর একক উদ্ধৃতি রয়েছে এবং স্টিডিনের সাথে কাজ করে।

জিএনইউ আওক ম্যানুয়ালটিতে বিভাগের ১.১.৪ রয়েছে এক্সিকিউটেবল অ্যাব প্রোগ্রাম যেখানে এটি # উদাহরণস্বরূপ #!

নোট করুন যে অনেক সিস্টেমে awkইন-এর /usr/binপরিবর্তে পাওয়া যেতে পারে /bin। ক্যাভেট এমপোটার

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


আপনি কেন ব্যবহার করবেন -f? /bin/gawkযথেষ্ট না ? এছাড়াও, এই প্রাসঙ্গিক হতে পারে।
টেরডন

উত্তর:


7

শেবাংকে বোঝানো হয়নি যে নমনীয় হতে হবে । কিছু ক্ষেত্রে থাকতে পারে যেখানে দ্বিতীয় প্যারামিটার কাজ করে , আমি মনে করি ফ্রিবিএসডি এর মধ্যে একটি।

OS এর সাথে আসা গোক এবং বেশিরভাগ ইউটিলিটিগুলির মধ্যে এটি প্রত্যাশিত /usr/bin/

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

এটি প্রথমে লিনাক্সে উত্তরাধিকার সূত্রে প্রাপ্ত হয়েছিল, তবে ডিস্কের স্থানটি এখন আর কোনও সমস্যা নয় এবং বেশিরভাগ ক্ষেত্রে /usr/মূল ফাইল সিস্টেমের মধ্যে রয়েছে, বর্তমান প্রবণতা হ'ল সবকিছুকে /usr/binঅন্তত সরানো (কমপক্ষে লিনাক্স বিশ্বে)। সুতরাং একটি ডিস্ট্রো দ্বারা ইনস্টল করা বেশিরভাগ ইউটিলিটিগুলি সেখানে পাওয়া যাবে বলে আশা করা যায়। এমনকি সবচেয়ে মৌলিক ইউটিলিটিগুলি, মত cp, rm, lsইত্যাদি (ভাল, এখনো নয়)।

শেবাং পছন্দ সম্পর্কে। Ditionতিহ্যগতভাবে, এটি অ্যাডমিন বা ব্যবহারকারীদের তাদের পরিবেশ অনুসারে সম্পাদনা করতে হবে। সমস্ত বিকাশকারী জানেন যে, অন্য লোকের সিস্টেমে, দোভাষী ফাইল সিস্টেমের যে কোনও জায়গায় থাকতে পারে (যেমন /usr/local/bin, /opt/gawk-4.0.1/bin)। যথাযথভাবে প্যাকেজযুক্ত স্ক্রিপ্টগুলি (আরপিএম, দেব ইত্যাদি) হয় ডিস্ট্রো প্যাকেজের উপর নির্ভরতা (যেমন দোভাষীর একটি পরিচিত অবস্থান রয়েছে) অথবা একটি কনফিগার স্ক্রিপ্ট যা ইনস্টলেশনের সময় সঠিক হ্যাশব্যাং সেটআপ করে।


14

আপনার যদি কমান্ডটিতে আর্গুমেন্টগুলি প্রেরণের দরকার না হয় তবে #!/usr/bin/env gawkযাওয়ার উপায় হ'ল অনেকগুলি কার্নেল (লিনাক্স সহ) কেবল শেবাং প্রোগ্রামগুলিতে একক যুক্তি গ্রহণ করে।

অন্যথায়, আপনি একটি বহুবৃত্ত প্রোগ্রাম তৈরি করতে পারেন যা শেল র‍্যাপার এবং অ্যাজক স্ক্রিপ্ট উভয়ই। আজকের জন্য এখানে একটি।

#!/bin/sh
true + /; exec gawk -f "$0"; exit; / {}
# awk script starts here

শেল পার্সিং:

  • true + /;- trueদুটি জড় যুক্তি +এবং সহ কমান্ড (যা কিছুই করে না) /
  • কল gawk। এটি এমন কোনও শেল স্নিপেট হতে পারে যাতে নতুনলাইন থাকে না এবং যেখানে স্ল্যাশ লেখা থাকে \/(ভিতরে শাবলগুলি বাদ দিয়ে শেলটি কিছু মনে করে না)।
    কলটি execএকটি প্রস্রোসেস হিসাবে গাওককে সম্পাদন করার পরিবর্তে শ্যাওলটিকে গাওকের সাথে প্রতিস্থাপন করতে ব্যবহার করে।
  • exit;- শেল থেকে প্রস্থান করুন, যদি গাওক পাওয়া যায় নি। এর পরে যে কোনও কিছুই উপেক্ষা করা হবে, শেলটি কার্যকর করার আগে শেল পুরো লাইনটি বিশ্লেষণ করার চেষ্টা করার ক্ষেত্রে এটি বৈধ শেল সিনট্যাক্স হওয়া উচিত।

জঞ্জাল বিশ্লেষণ:

  • স্ল্যাশগুলির মধ্যে বিট একটি নিয়মিত প্রকাশ।
  • true + /REGEX/- একটি শর্ত. trueএটি একটি সংজ্ঞায়িত পরিবর্তনশীল তাই এর সংখ্যাসূচক মানটি 0 হয়, এটি গুরুত্বপূর্ণ নয়।
  • {} - যদি বলা শর্ত থাকে তবে কিছুই করবেন না।

5

গিলসের প্রস্তাবিত সমাধানটি আসলেই একটি খুব ভাল পদ্ধতির (অবশেষে তার পোস্টে ভোট দেওয়ার খ্যাতি আছে :))।

যে কোনও ক্ষেত্রে, যতক্ষণ না আমি execকমান্ডটি বুঝতে পারি , এটি exitশেল প্রক্রিয়াটি প্রতিস্থাপনের কারণে এটি অপ্রয়োজনীয়, আসলে অ্যাক্সেসযোগ্য হওয়ার পরে সঠিক করে তোলে awk

awkতদতিরিক্ত, স্ক্রিপ্টটিকে তার আহ্বান পরামিতিগুলি অ্যাক্সেস করার অনুমতি দেওয়ার জন্য, আমি প্রস্তাবিত সমাধানটিতে কিছু পরিবর্তন প্রস্তাব করব:

#!/bin/sh
true + /; exec -a "$0" gawk -f "$0" -- "$@"; / {}
# awk script starts here

-a "$0"তার আবাহন নাম অ্যাক্সেস করতে স্ক্রিপ্ট অনুমতি দেয়, অন্যথায় এটা সবসময় পাবেন একটি awkবা gawkযখন অ্যাক্সেস ARGV[0]পরিবর্তনশীল। একইভাবে, "$@"স্ক্রিপ্টটি ARGV[1...N]অ্যারের বাকী প্যারামিটারগুলি অ্যাক্সেস করার অনুমতি দেয় এবং --পূর্ববর্তীটি স্ক্রিপ্টটিকে -<something>গোকের ব্যাখ্যা না করেই আর্গুমেন্টগুলি গ্রহণ করার অনুমতি দেয় তার জন্য এটি।

স্ক্রিপ্ট প্রোগ্রামটির ব্লক exit(0);শেষে একটি বিবৃতি যুক্ত করা বা স্মরণ করার জন্য একটি বিষয় হ'ল অন্যথায় ইনপুট ফাইল হিসাবে স্ক্রিপ্টে পাস হওয়া সমস্ত পরামিতি হুমকির মুখে ফেলেছে। (দয়া করে নোট করুন যে এটির কিছুই করার নেই, আমরা যে বক্তব্যটি লাইন থেকে সরিয়েছি , এটির সাথে একটি অ্যাক্র্যাচেল শেল স্টেটমেন্ট ছিল যখন এই প্রস্তাবিত প্রস্থানটি অ্যাডক কোডে রয়েছে)।BEGIN { ... }awkawkexittrue + ...


exit(0)খুবই কাজে লেগেছে! এছাড়াও, ম্যাকোস ব্যবহারকারীদের জন্য, এই টুকরোটি দেখুন: একটি ভাল পোর্টেবল
Seamus
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.