shと./を使用してbashスクリプトを実行することの違いは何ですか。

これと同じ質問は、bashスクリプトだけでなく、任意のタイプのスクリプトを使用するときに発生する可能性があります。 インタプリタを介してスクリプトを実行することと、直接実行することには大きな違いがありますか?

Let's Use Linux(uL)からのこの興味深い投稿で明らかにするもうXNUMXつの謎。


スクリプトのファイル名をインタープリター(sh、python、perlなど)に渡してスクリプトを実行すると、実際にはインタープリターが実行され、実行するプログラムが引数として渡されます。 たとえば、miscript.sh引数を渡してshインタープリターを実行します。

sh myscript.sh

スクリプトを単独で実行すると、システムは必要なインタープリターを呼び出し、はい、スクリプトを実行して、引数としてインタープリターに渡しますが、すべて自動的に、スクリプトを実行したユーザーが知らないうちに実行されます。

./myscript.sh

スクリプトを単独で実行するには、次の2つの条件を満たす必要があります。

1)スクリプトには「バングライン」が含まれている必要があります。 これはスクリプトの最初の行であり、文字#で始まる必要があります。 また、インタプリタが配置されているパスを指定する必要があります。 この条件は、bashからのものだけでなく、すべてのタイプのスクリプト(python、perlなど)に当てはまることに注意することが重要です。

したがって、たとえば、スクリプトの最初の行には次のものが含まれている必要があります。

#!/ bin / bashに

2)ファイルには実行権限が必要です。

スクリプトに実行権限を付与するには、次のように記述する必要があります。

chmod a + x miscript.sh

準備ができました。次のように実行します。

./myscript.sh

または、スクリプトを「特別な」パスにコピーして、簡単に呼び出せるようにします。 たとえば、それを/ usr / sbinにコピーして、それが配置されているフルパスを含めずにどこからでも実行できます。

コピーします:

sudo cp miscript.sh / usr / sbin / miscript

実行します:

myscript

ご覧のとおり、実際には、舞台裏で何が起こっているかは、どちらの場合も非常に似ています。 ただし、「バングライン」を含めることで、ユーザーがスクリプトを実行するために必要なインタープリターが配置されているパスを覚えておく必要がなくなるため、スクリプトの配布がはるかに簡単になります。 結論:それは基本的に快適さの問題です。


20コメント、あなたのコメントを残してください

コメントを残す

あなたのメールアドレスが公開されることはありません。 必須フィールドには付いています *

*

*

  1. データの責任者:MiguelÁngelGatón
  2. データの目的:SPAMの制御、コメント管理。
  3. 正当化:あなたの同意
  4. データの伝達:法的義務がある場合を除き、データが第三者に伝達されることはありません。
  5. データストレージ:Occentus Networks(EU)がホストするデータベース
  6. 権利:いつでも情報を制限、回復、削除できます。

  1.   オズワルドビジャロエル

    Erpowerに同意します。インタープリターのバージョンとそのパスはどちらも可変であり、一定ではありません。さらに、GNU / LinuxディストリビューションだけがBashを使用しているわけではないと考えられる場合(freeBSD、OpenSolaris、Macもあります)、多くのそれらの構成またはルートは異なります。

    重要なことは、スクリプトの呼び出しを./またはsh(またはpython ...など)で操作できる柔軟性があることを知っておく必要があります。

  2.   he_who_knows@gmail.com

    Bashは、注文を解釈する機能を持つコンピュータープログラムです。

    これはUnixシェルに基づいており、POSIXに準拠しています。

    代わりに、shは注文を解釈する機能を持つコンピュータプログラムです。
    プロセス制御、リダイレクトなどの機能が組み込まれています
    入力/出力、ファイルのリストと読み取り、保護、
    によるプログラムを書くためのコミュニケーションとコマンド言語
    バッチまたはスクリプト。 これはUnixの最初のバージョンで使用されていたインタプリタであり、事実上の標準になりました。

  3.   ダイアナC

    こんにちは、私はスクリプトの使用の初心者です。誰かが私が抱えている問題について私を助けてくれるかどうか知りたいです。

    コンソールからいくつかの初期データを含める必要があるプログラムを管理していますが、スクリプトを使用すると、初期データを使用してプログラムを実行できるため、何度も何度も書き込む必要がないことがわかりました。プログラムを実行する必要があります。

    やり方がわからないので、誰か助けてくれたらとてもありがたいです。

  4.   Linuxを使いましょう

    ほら、それはあなたがスクリプトを書いているプログラミング言語に依存します。 ただし、いずれの場合でも、必要なものは次のとおりです。

    1)スクリプトが実行されるたびにユーザーがそのデータを入力する必要がある場合、最も一般的な手順は、変数が入力に入力された値を取得することです。

    2)値が常に同じである場合は、定数を使用できます。

    3)別のオプションは、スクリプトがパラメーターを受け取ることができる可能性です。

    乾杯! ポール。

  5.   Linuxを使いましょう

    あなたが言っていることは興味深いです。 それは2つの方法と呼ばれます:シェバンラインまたは直接バンライン。 私はあなたに情報を与えます: http://python.about.com/od/programmingglossary/g/defbangline.htm
    乾杯! ポール。

  6.   @lomellamomario

    興味深いことに、私はその詳細について考えるのをやめませんでした。 互換性のためだけに存在する不要な数キロのコードを削除し、システム速度を向上させる有名なカーネルの再コンパイルなど、コンソールのレタッチに関する記事をもっと見るのは興味深いことです。

  7.   Linuxを使いましょう

    はい。 ちゃんと覚えておきますよ。
    乾杯! ポール。

  8.   Linuxを使いましょう

    うまくいったことをうれしく思います。 私はいつも面白くて実用的だと思うものを投稿しようとしています。
    ハグ! ポール。

  9.   フェリックスマヌエルブリトアマランテ

    良い習慣を持つすべてのプログラマーは、コードの最初の行に「強打線」を追加します。 Pythonでは、コーディングとバングラインを決して忘れません。
    #!/ usr / bin / python2.7
    #*。*エンコーディング= utf-8 *。*

  10.   ダイエックス02

    すばらしいです。特にソースファイル(tar.gzなど)からのコンパイルまたはインストールに関しては、コマンドラインに関する詳細情報を公開できることを願っています。

  11.   ジョーディカストロ

    私は「バンライン」について聞いたことがありませんでした私はいつもそれをシバンとして知っていました

    http://en.wikipedia.org/wiki/Shebang_%28Unix%29

    よろしく

  12.   ジョナサンフェルナンデス

    おもしろいメモ…ありがとう!

  13.   エムディエム

    どれほど面白いか、私はプログラミングとスクリプトに関連するすべてについて完全に無知であると宣言します。それがどのように機能するかはわかりませんでしたが、一部にそのヘッダーがあることに気づきました。

  14.   マリオ・ライモンディ

    このエントリに関係する私に起こった説明:私はadobeエアガジェット(ポーカーオッズ計算機)をインストールしたかった。 adobe airインストーラーが行うことは、対応するスクリプトを「su」で実行しますが、。/の形式でrootパスワードを要求します。 スクリプトには実行権限がなかったため、権限が拒否されました。解決策:権限を変更したくない場合は、shを使用してスクリプトを実行します(tmp chmodフォルダーなどに移動するよりも高速です)。 そこでスクリプトが実行され、adobeインストーラーと別のbutterflyのものが呼び出されます。

  15.   エロ千人

    とても面白い記事です! コンソールについてもう少し学ぶのを手伝ってくれてありがとう。 このような記事を公開し続けるかどうか見てみましょう^^。
    それを続けてください、これは間違いなく私のお気に入りのブログです!!

  16.   エルパワー

    使用するインタープリターのバージョンによって異なる場合があることに注意してください。 シェバンに従ってスクリプトを直接実行すると、使用するインタープリターのバージョンを示す方法がなく、必要になる場合があります。 代わりにインタープリターを実行し、スクリプトをパラメーターとして渡すと、実行されているバージョンがわかります。

    たとえば、Pythonでは、シェバンが#!/ Usr / bin / python2.4の場合、プログラムは#!/ Usr / bin / python2.6の場合、または#!/ Usr / bin / pythonの場合とは異なる方法で実行されます。 (これは通常、デフォルトでインストールおよび構成されているPythonのバージョンへのシンボリックリンクです)。 これは、Python2.6にPython2.4には存在しなかった新しい機能があるために発生します。そのため、システムにpython 2.4のみがインストールされている場合、#!/ Usr / bin / pythonshebangを示すその機能を使用するスクリプトの記述は失敗します。 代わりに、「python2.4 / path / al / script.py」または「python2.6 / path / al / script.py /」で開始することにより、スクリプトを必要なバージョンのpythonでいつでも強制的に実行できます。

    シェルスクリプトの場合、使用するシェルにも違いがあるため、#!/ Bin / shと#!/ Bin / bashを使用すると、スクリプトによって結果が異なる可能性があります。 bashにのみ存在するが、shebang#!/ Bin / shを示す機能を使用してスクリプトを作成する場合、スクリプトはおそらくLinuxで機能します(ほとんどのディストリビューションでは/ bin / shはbashへのシンボリックリンクです)が、おそらく失敗します。 bashがインストールされていない、または/ bin / shが/ bin / bashへのシンボリックリンクではない他のUNIX。

    また、移植性に関しては、シェバンに示されている経路が絶対的であり、通訳が他の場所に設置されている場合があることを考慮に入れる必要があります。 たとえば、ディストリビューションのパッケージを使用する代わりにPythonをダウンロードしてコンパイルした場合は、Pythonインタープリターを/ usr / local / bin / pythonにインストールするのが一般的です。 シバンが#!/ Usr / bin / pythonの場合、スクリプトはそれらのシステムでは機能しません。 これらの問題を回避するために、「#!/ Usr / bin / env python」(または「#!/ Usr / bin / envsh」)として使用できます。 http://en.wikipedia.org/wiki/Shebang_(Unix)#Portability

  17.   Linuxを使いましょう

    ジョナサン、ありがとう! コメントありがとうございます!
    乾杯! ポール。

  18.   アントニオ

    私が知りたいことはどこにもありません、または少なくとも検索エンジンでそれを上げる方法がわかりません。xXがコマンドaptitudeまたは«su»を実行するスクリプトを作成したいと思います(これは単なる例ですが、それらは私が考えることができる2つのケースです)そして適性の場合には時々「yon」を入力するように求められるか、「su」にパスワードを求められます...スクリプトにこれらのオプションを選択させたいパラメータを渡すか、知らないメソッドを使用することにより、自動的に...。 注目してくれてありがとう

    1.    Linuxを使いましょう

      こんにちはアントニオ! あなたの問題がパスワードを入力しなければならないことであるならば、私は解決策があるとは思いません。 これはセキュリティ対策であるため、誰もがプログラムをインストールできるわけではありません。
      適性とはいと言わなければならないことに関しては、解決できると思います。 現時点では、使用する正確なパラメータを覚えていませんが、manページで確認してください。 ターミナルを開き、コマンドmanaptitudeを入力します。
      抱擁! ポール。

  19.   デビッドMM

    とても良い投稿です。
    私は特に、この投稿で、発生する質問/疑問に非常に明確かつ簡潔に答えることが好きでした。