ডামিদের জন্য বাশ শেবাং?


36

আমার বেশিরভাগ ব্যাশ স্ক্রিপ্ট রয়েছে যা বেশিরভাগ ব্যবহার করে

#!/bin/bash

তবে আমি নিয়মিত কিছু দেখতে পাই যা দেখতে দেখতে আসে

#!/bin/bash -e
#!/bin/bash -x
#!/bin/bash -ex

ইত্যাদি।

কেউ কি এই শেবাং বিকল্পগুলির অর্থ এবং উপকারিতা ব্যাখ্যা করতে পারে এবং সেগুলি অন্যান্য শেবাংগুলিতে প্রয়োগ হয় কিনা?


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

উত্তর:


41

যদি কোনও স্ক্রিপ্ট /path/to/fooশুরু হয় #!/bin/bash, তবে এক্সিকিউট /path/to/foo arg1 arg2করা এক্সিকিউট করার সমতুল্য /bin/bash /path/too/foo arg1 arg2। শেবাং লাইনটি যদি হয় তবে #!/bin/bash -exএটি কার্যকর করার সমতুল্য /bin/bash -ex /path/too/foo arg1 arg2। এই বৈশিষ্ট্যটি কার্নেল দ্বারা পরিচালিত হয়।

নোট করুন যে আপনার কাছে শেবাং লাইনে কেবল একটি যুক্তি থাকতে পারে: কিছু ইউনিক (যেমন লিনাক্স) কেবল একটি যুক্তি গ্রহণ করে, যাতে #!/bin/bash -e -xবাশ -e -xদুটি আর্গুমেন্টের পরিবর্তে একক পাঁচ-অক্ষর যুক্তি (সিনট্যাক্স ত্রুটি) গ্রহণ করতে পারে -eএবং -x

বোর্ন শেল shএবং উত্পন্ন শেল যেমন POSIX sh, bash, ksh, এবং zsh এর জন্য:

  • -e এর অর্থ হ'ল যদি কোনও কমান্ড ব্যর্থ হয় (যা এটি ননজারো স্ট্যাটাস ফিরিয়ে দিয়ে বোঝায়), স্ক্রিপ্টটি অবিলম্বে বন্ধ হয়ে যাবে।
  • -x শেলটির ফলে একটি এক্সিকিউশন ট্রেস মুদ্রণ করে।

অন্যান্য প্রোগ্রামগুলি এই বিকল্পগুলি বুঝতে পারে তবে বিভিন্ন অর্থ সহ।


24

তারা অপশন প্রেরণ হয় bashদেখতে help setআরও তথ্যের জন্য এই ক্ষেত্রে:

-x  Print commands and their arguments as they are executed.
-e  Exit immediately if a command exits with a non-zero status.

3
+1 এবং -exউভয়ই করে
নিফেল

এটি বিভ্রান্তিকর কারণ এগুলি দেখতে কমান্ড-লাইন বিকল্পগুলিকে বাশের মধ্যে দিয়ে গেছে।
Caoilte

2
@Caoilte: তারা তো সেই (থেকে এসেছ man bash): In addition to the single-character shell options documented in the description of the set builtin command, bash interprets the following options when it is invoked: [...]
সিউরাস

1
আহ! পলক এবং আপনি এটি মিস! :)।
Caoilte

0

আমি আরও একটি ভাল - যেমন বহনযোগ্য - বিকল্প হিসাবে উল্লেখ করতে চাই:

#!/usr/bin/env bash

উপরের উদাহরণটি এক্সিকিউটেবল, যা সর্বদা হয় না তা envখুঁজে পেতে ব্যবহার bashকরে /bin/bash। আপনি পুরানো #!/bin/bashস্ক্রিপ্টগুলি উদাহরণস্বরূপ নিক্সস-এ কাজ করে না ।

আপনি ব্যবহার করেন তাহলে envউপরের হিসাবে প্রদর্শিত, আপনি যেমন একটি আর্গুমেন্ট সাপ্লাই করতে পারছে না -eকরার bash(যেমন যতদূর আমি জানি)। তবে আপনি এটি পরিবর্তে এটি করতে পারেন:

#!/usr/bin/env bash
set -e

2
আমি এটি সর্বদা করি, তবে আমি এটি "আরও বহনযোগ্য" বলব না - আসলে, ব্যবহারকারীর সম্পূর্ণ আলাদা কিছু চালানোর ঝুঁকি (আপনি যেটি দিয়ে সিস্টেম শিপকে ধরে নিতে পারেন) তার থেকে অনেক বেশি। উদাহরণস্বরূপ, উবুন্টু এখনও বাশ 4 চালান, যখন কোনও ব্যবহারকারী বাশ 5 চালানোর জন্য বেছে নিতে পারেন
স্ল্যাক করুন

হ্যাঁ, envবিশেষত অজগর চালিত স্ক্রিপ্টগুলির জন্য ব্যবহারটি ভাল নয় কারণ আপনি কেবল জানেন না যে ডিফল্টটি python2 বা 3 সংস্করণ এবং এটি কোনও নির্দিষ্ট সংস্করণের জন্য প্রয়োজনীয় স্ক্রিপ্টগুলির জন্য একটি পার্থক্য তৈরি করে। চতুর চেয়ে সুস্পষ্ট হওয়া ভাল
smac89
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.