"বাশ -" এর "-" অর্থ কী?


33

bash -নিম্নলিখিত বাশ শেল কোডটির অর্থ কী ? মনে হচ্ছে আউটপুটটিকে শেষ কোডটি ইনপুট হিসাবে নিতে ব্যবহৃত হবে। যদি তা হয় তবে আমি কি কেবল এটি লিখতে পারি bashবা হিসাবে xargs bash?

curl --silent --location https://rpm.nodesource.com/setup | bash -

উত্তর:


36

সন্দেহ হলে, উত্স কোডটি পড়ুন। =)

shell.cকার্যকরীভাবে 4.3, লাইন 830, টিপুনparse_shell_options() :

  /* A single `-' signals the end of options.  From the 4.3 BSD sh.
     An option `--' means the same thing; this is the standard
     getopt(3) meaning. */
  if (arg_string[0] == '-' &&
       (arg_string[1] == '\0' ||
         (arg_string[1] == '-' && arg_string[2] == '\0')))
    return (next_arg);

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

আপনার উদাহরণস্বরূপ, অবশ্যই, এটি -সম্পূর্ণরূপে অপ্রয়োজনীয়, কারণ এটি অনুসরণ করে কিছুই নেই। অন্য কথায়, bash -ঠিক সমানbash


বাশ তার আদেশগুলি গ্রহণ করে

  1. কোনও স্ক্রিপ্ট ফাইল থেকে যদি এটি কমান্ড লাইনে সরবরাহ করা থাকে বা
  2. তার স্টিডিন থেকে অ-ইন্টারেক্টিভভাবে যদি এটির স্টিনটি টিটিওয়াই না হয় (যেমন আপনার উদাহরণে: স্ট্ডিন একটি পাইপ, সুতরাং বাশ সেই লিপিটির লিপিটি স্ক্রিপ্ট হিসাবে কার্যকর করবে), বা
  3. ইন্টারেক্টিভভাবে যদি এর স্ট্ডিনটি টিটিওয়াই হয়।

এটি একটি ভুল ধারণা যা bash -বাশকে তার স্ট্যান্ডার্ড ইনপুট থেকে আদেশগুলি পড়তে বলে। যদিও এটা হল সত্য যে আপনার উদাহরণে, ব্যাশ stdin থেকে তার কমান্ড পড়তে হবে, এটা কিনা একটা তাই নির্বিশেষে কাজ করবে -কমান্ড লাইন উপর, কারণ উপরে বর্ণিত, bash -অভিন্ন bash

-স্ট্যান্ডিনের অর্থ এই নয় যে আরও চিত্রিত করুন , বিবেচনা করুন:

  • catকমান্ড একটি ব্যাখ্যা করার জন্য ডিজাইন করা -stdin হিসাবে। উদাহরণ স্বরূপ:

    $ echo xxx | cat /etc/hosts - /etc/shells
    127.0.0.1 localhost
    xxx
    # /etc/shells: valid login shells
    /bin/sh
    /bin/dash
    /bin/bash
    /bin/rbash
    /bin/zsh
    /usr/bin/zsh
    /usr/bin/screen
    /bin/tcsh
    /usr/bin/tcsh
    /usr/bin/tmux
    /bin/ksh93
  • এর বিপরীতে, আপনি ব্যাশ চালানো পেতে পারে না /bin/dateতারপর /bin/hostnameএই চেষ্টা করে:

    $ echo date | bash - hostname
    /bin/hostname: /bin/hostname: cannot execute binary file

    বরং এটি /bin/hostnameশেল স্ক্রিপ্ট ফাইল হিসাবে ব্যাখ্যা করার চেষ্টা করে যা ব্যর্থ হয় কারণ এটি বাইনারি গব্বলডিগুকের একগুচ্ছ।

  • আপনি হয় date +%sব্যবহার bash -করে নির্বাহ করতে পারবেন না ।

    $ date +%s
    1448696965
    $ echo date | bash -
    Sat Nov 28 07:49:31 UTC 2015
    $ echo date | bash - +%s
    bash: +%s: No such file or directory

আপনি কি xargs bashপরিবর্তে লিখতে পারেন ? নং curl | xargs bashকমান্ড-লাইন আর্গুমেন্ট হিসাবে স্ক্রিপ্টের বিষয়বস্তু দিয়ে বাশকে অনুরোধ করবে। সামগ্রীর প্রথম শব্দটি প্রথম যুক্তি হবে এবং এটি সম্ভবত স্ক্রিপ্ট ফাইলের নাম হিসাবে ভুল ব্যাখ্যা করা হবে।


6
একমাত্র সঠিক উত্তরের জন্য আপভোট করুন।
গিরিহা

প্রকৃতপক্ষে: An argument of - is equivalent to --.
ম্যানপেজের

আপনি যদি সত্যই এর xargsপরিবর্তে সত্যই ব্যবহার করতে চেয়েছিলেন তবে এটি (একটি ছোট যথেষ্ট ইনপুট স্ক্রিপ্টের সীমিত দৃশ্যে) কাজ করবে | xargs bash -c; তবে সত্যই, এটি কোনও কার্যকর বা অভিব্যক্তিপূর্ণ ব্যবহার নয় xargs
ট্রিপলি

@ ট্রিপলি যদি ইউআরএল এর বিষয়বস্তুগুলি ওয়ান-লাইনারের চেয়ে বেশি কিছু থাকে, তবে লাইনটি বিভক্ত হয়ে যায় এবং অন্যান্য ডিলিমেটারগুলি সম্ভবত সমস্ত ভুল।
200_success

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