この最初の行(#!/bin/bashまたは#!/bin/sh)には名前があります。 それは”she-bang”(shabang)として知られています。 これは、トークンsharp(#)とbang(!). それはまたsh-bang、hashbang、poundbangまたはhash-plingと呼ばれます。 計算では、she-bangは、文字番号記号と感嘆符(#!)スクリプトの開始時。
/bin/bash VS/bin/sh
私たちはしばしば、she-bangやスクリプトヘッダーの様々なを見てきました。 私達は頻繁にその特定の彼女強打を使用してその特定の原稿がなぜあるか疑問に思う、なぜない他。 Unixライクなオペレーティングシステムでは、複数のシェルを選択できます。 シェルは、小さなプロンプトだけでなく、スクリプトのコマンドの解釈も担当します。 したがって、条件、パイプ、ループなどを使用して大きく複雑な論理を実装する場合、シェルは特に重要な役割を果たします。
/bin/shはシステムシェルを表す実行可能ファイルで、通常はシステムシェルの実行可能ファイルを指すシンボリックリンクとして実装されます。 システムシェルは、基本的にスクリプトが使用すべきデフォルトのシェルです。 ここ数年で、Debian(およびUbuntu)はシステムシェルをbashからdashに切り替えることにしました。
Dashはbashとかなりよく互換性があり、同じPOSIX標準に基づいています。 ただし、bash固有の拡張機能は実装していません。 POSIX標準は、UNIXのようなOsを標準化しようとするポータブルオペレーティングシステムインタフェースです。 Ubuntuのシステムシェルはdashを指していますが、ユーザーとしてのログインシェルは現時点ではbashであり続けます。
/bin/bashは、linuxシステムのユーザーログイン用のデフォルトシェルとして使用される最も一般的なシェルです。 シェルの名前はBourne-again shellの頭字語です。 Bashは、スクリプトの大半を実行することができ、それはより多くの機能を持っているので、広く使用されている、よく開発され、より良い構文です。
何ですか? /なぜ私たちはそれを使うのですか?
#!/bin/bash
echo $(date) # Will print the output of date command
touch ~/output.txt
echo "Hey there" > ~/output.txt
上記のように非常に単純なスクリプトを考えてみましょう。 最も単純なケースでは、シェルスクリプトを分析する場合、それはファイルに格納されているコマンドのリストに過ぎません。 これにより、同じタスクやコマンドを何度も何度も実行する手間が軽減されます。 したがって、スクリプトの先頭を見ると、最初の行はハッシュ(#)と感嘆符(!). あなたはすでにハッシュ(#)で始まる行がコメントとして読み込まれることを知っている必要があります。 したがって、スクリプトを実行すると、最初の行はコメントとして読み込まれ、インタプリタは二番目の行に移動します。 しかし、最初の行はすでにそれの仕事をしています。
Unixライクなオペレーティングシステムでは、she-bang(#!)がプログラムとして実行されると、プログラムローダーはスクリプトの最初の行の残りの部分をインタプリタ指示子として解析します。 したがって、指定されたインタプリタプログラムが代わりに実行され、スクリプトを介して最初に使用されたパスを引数として渡します。
任意のスクリプトが次の行で始まるとします:
#!/bin/sh
次に、プログラムローダーは、他のプログラムの代わりに/bin/shプログラムを使用するように指示され、スクリプトのパスを最初の引数として渡します。
簡単に言えば、スクリプトの先頭にあるshe-bangは、このファイルが指定されたコマンドインタプリタに供給されるコマンドのセットであることをシステ Unixライクなオペレーティングシステムには様々なシェルがあり、スクリプトヘッダ行ごとに異なるコマンドインタプリタ
いくつかのshe-bangの例
#!/bin/sh:Bourneシェルまたは互換性のあるシェルを使用してスクリプトを実行します。path/bin/sh
#!/bin/bash:Bashシェルを使用してスクリプトを実行します。
#!/bin/csh-f:Cシェルまたは互換シェルを使用してスクリプトを実行します。
#!/usr/bin/perl-T:perlを使用して、汚染チェック
#のオプションを使用してスクリプトを実行します。/usr/bin/env python :環境変数
からpythonインタプリタへのパスを自動的に検索することで、pythonを使用してスクリプトを実行します。