2013-05-13 20 views
6

例1効果(#)の行は、および/またはコメントのような#!/ binに/ shの行の後に

#!/bin/sh 
# purpose: print out current directory name and contents 
pwd 
ls 

例2

# purpose: print out current directory name and contents 
#!/bin/sh 
pwd 
ls 

は何である前に、違い - 最初の行をコメント(#)にして、#!/bin/shを2行目とすると、どうなりますか?

#!/bin/shの意味は?

+0

スクリプトをコードタグで囲んだ方が簡単です。不規則なフォントは本当に混乱します... – user1581900

+0

#!/ bin/shは、スクリプトに使用するシェルへのパスを指定します。同様の質問がここで答えられました:http:// stackoverflow。com/questions/8967902 /なぜあなたが必要とするのbin-bash-at-the-start-of-aスクリプトファイル – user1581900

+2

可能な複製... http://stackoverflow.com/questions/7366775/what-does-the-line-bin-sh-un-a-unix-shell-script – Peeyush

答えて

2

通常、シェルスクリプトは、/ etc/passwdファイルで定義されているデフォルトのシェルによって実行されます。しかし、スクリプトを実行できるプログラムを明示的に定義することができます。

Unicesは、特定のスクリプト(男性execve(2))の実行に必要なプログラムを特定するための一般的な方法を使用します。スクリプトに適切な実行権が設定されていて、スクリプト内の最初の行が#!文字で始まっている場合、後で定義されたプログラムによって実行されます。

たとえば、最初の行が#!/usr/bin/awk -fの場合、残りのファイルはawkプログラムに渡されます(したがって、awkの構文を使用する必要があります)。あるいは、Makefileが#!/usr/bin/make -fで始まっていれば、残りのファイルはmakeに渡されます。スクリプトを通常のプログラムとして起動することができ、スクリプトはawkまたはmake(または何らかの定義どおりの)構文で記述することができます。

execveは、ファイルの最初の2文字として#!が見つからない場合、通常のスクリプトファイルとみなされ、そのまま実行されます。

したがって使用する#!スクリプト言語を特定できます。スクリプトを使用して他のユーザーがどのシェルを使用しているかを知る必要はありません。他の行では#!がデフォルトのシェルと解釈されます。これは通常は単にコメント行です。

+0

2行目の#!/ bin/shの後に1行目にコメント(#)を付けるとどうなりますか? – Manikanta

+0

@Manikanta: 'sh'のコメント行ですのでスキップされます。 Linuxマシンの 'ls -l/bin/sh'は、bashへのシンボリックリンクです。 – TrueY

+0

@TrueY '/ bin/sh'は、すべてのLinuxシステムで' bash'へのリンクではありません。 Debianベースのシステムはかなり前に 'ダッシュ'に切り替わりました。また、 '#!'を探すのはシェルではなく、カーネルはそれを行います。 –

1

第1の&第2のシェルスクリプトとは何ですか?

出力に違いはありません。しかし、両方を実行する時間は、通訳者が1行ずつ読むのと少し違うでしょう。

2行目の#!/ bin/shの後に1行目にコメント(#)を付けるとどうなりますか?

シェルスクリプト(#!)以外の(#)で始まる行は、シェルスクリプト内のコメントとして扱われます。

#!/ bin/shの意味は?

シバン(#!)の後に使用されるインタープリタへのパス(ここでは/ bin/sh)です。シェルは、スクリプトを実行するためにシバンの後に記載されたインタプリタ言語を使用しようとします。

+2

これは間違いです。シバンが見つからない場合に実行されるシェルに応じて、問題のシェルの機能に基づいて出力が異なる場合があります(このスニペットではなく実際のシナリオ)。また、通常、スクリプトを行単位で読み取ることはなく、ブロック単位で読み取ります。 –

+0

2番目の例でシバンラインが尊重されているかどうかをコメントできますか?言い換えれば、あなたがシバンを欲しければ**あなたのファイルの最初のものにする必要がありますか?それ以前に他のコメントはありませんか? – FGreg

関連する問題