GNU/Linux >> Linux の 問題 >  >> Linux

スクリプト ファイルの先頭に #!/bin/bash を配置する必要があるのはなぜですか?

*nix シェルが実行するインタープリターの種類を認識できるようにするための規則です。

たとえば、古いタイプの ATT は sh にデフォルト設定されていました (Bourne シェル)、旧バージョンの BSD のデフォルトは csh でした (C シェル)

今日でも (ほとんどのシステムで bash が実行されており、"Bourne Again Shell" )、スクリプトは bash、python、perl、ruby、PHP などで作成できます。たとえば、#!/bin/perl が表示される場合があります。 または #!/bin/perl5 .

PS:感嘆符 (! ) は親しみを込めて "bang" と呼ばれています .シェル コメント記号 (# ) は 「ハッシュ」 と呼ばれることもあります .

PPS:覚えておいてください - *nix では、接尾辞をファイルの種類に関連付けることは単なる 慣例 です。 、「ルール」ではありません . 実行可能ファイル バイナリ プログラム、100 万種類のスクリプトのいずれか、およびその他のものにすることができます。したがって、#!/bin/bash が必要です .


より正確にはシバン #!実行可能ファイルの最初の 2 バイトの場合 (x mode) ファイルは、(プログラムを実行する) execve(2) システム コールによって解釈されます。しかし execve の POSIX 仕様 シバンについては言及しないでください。

その後に、インタープリター実行可能ファイルのファイル パスを指定する必要があります (相対的な場合もありますが、ほとんどの場合は絶対パスです)。

インタープリターを見つけるための便利な (またはあまり良くない) トリック (例:python ) ユーザーの $PATHenv を使用することです プログラム (常に /usr/bin/env すべての Linux で) など

 #!/usr/bin/env python

どの ELF 実行可能ファイルもインタープリターにすることができます。 #!/bin/cat を使用することもできます または #!/bin/true あなたがしたいなら! (しかし、それはしばしば役に立たないでしょう)


シバンといいます。 Unix 用語では、# はシャープ (音楽のように) またはハッシュ (Twitter のハッシュタグのように) と呼ばれ、!バンといいます。 (以前のシェル コマンドを !! で実際に参照できます。これは bang-bang と呼ばれます)。一緒にすると、haSH-BANG、またはシバンになります。

#! の後の部分。実行に使用するプログラムを Unix に指示します。指定されていない場合は、bash(またはsh、zsh、または$SHELL変数が何であれ)で試行しますが、そこにある場合はそのプログラムを使用します。さらに、# はほとんどの言語でコメントであるため、以降の実行ではこの行は無視されます。


Linux
  1. Linuxは複数の連続したパスセパレーター(/ home //// username /// file)をどのように処理しますか?

  2. Bashスクリプトがエイリアスを認識しないのはなぜですか?

  3. / sbin/nologinと/bin/ falseの違いは何ですか?

  1. フォルダから最も古いファイルを削除するためのBashスクリプト?

  2. シェルスクリプトBashでサブストリングをチェックする方法は?

  3. / bin/bashではなく/bin/ shを指すシバンを使用する理由はありますか?

  1. Bash スクリプトのスクリプト ファイル名を知るにはどうすればよいですか?

  2. /、/boot、/home、swap に割り当てるサイズ

  3. #!/bin/bash と #!/bin/sh はいつ使用する必要がありますか?