私は このサイトでのこの質問 を見たので、この質問をするように促されました。 Unixで実行可能ファイルとシェルスクリプトの違いは何ですか?
実行可能ファイルとは、実行可能なビットが設定されたファイルを指します(プログラムの実際の実行にエラーがあった場合でも)。
シェルスクリプトは、#!
ディレクティブを使用してインタープリターを指定するシェルによって解釈されることを目的とした、特定の実行可能ファイルのtypeです。
scriptは次のようなファイルです。
AShellスクリプトは、インタプリタが Shell であるスクリプトです。 UNIXの世界では、「シェル」は Bourne Shell に似たシェルのファミリーを指します。最近のそのようなシェル(ash、bash、ksh、zsh、…)は [〜#〜] posix [〜#〜] シェル標準に準拠しています。より一般的には、「シェル」という単語には、csh、tcsh、fishなどの他のコマンドインタープリターを含めることができます。
実行可能ファイルは、実行可能な任意のファイルです。効果的に実行可能にするために、ファイルには2つのプロパティが必要です。
ls -l
で確認できます。x
文字が権限列に存在する必要があります。ファイルの形式は、システムが実行可能ファイルとして認識するものでなければなりません。実行可能な形式は、いくつかのカテゴリに分類できます。
#!
とファイルへのパスで構成される Shebang 行で始まるファイルです。そのようなファイルを実行するために、カーネルはインタプリタプログラムを実行し、スクリプトへのパスを引数として渡します。実行可能であることはシステムに依存することに注意してください。たとえば、AMD64 LinuxバイナリはAMD64 Linuxシステムでは実行可能ですが、32ビットシステムでは実行できません。 Androidのバイナリは、通常のLinuxインストールでは実行できません。Windows実行可能ファイルは、Wineが存在する場合のみLinuxで実行可能です。#!/usr/local/bin/Ruby
で始まるスクリプトは、は/usr/local/bin/Ruby
にあるプログラムです。
通常、シェルスクリプトは実行可能です。ただし、実行する権限がない場合は、実行できない可能性があります。それを明示的にインタプリタに渡すことでそれを解釈させることもできます(例:bash /path/to/script
)—「解釈させる」は「実行する」と言う素晴らしい方法です。
シェルスクリプト:
シェルスクリプトは、シェルによって解釈される一連のコマンドです(通常、shまたはsh互換のシェル、場合によっては別のシェルです)。
スクリプト名は、「。sh」、「。bash」、「。csh」などで終わることができますが、必ずしもそうである必要はありません(起動するシェルに関するヒントを与えます)。
わかりやすくするために、スクリプト名はscript
で、起動するシェルはbash
であると想定します。
シェルで起動する一般的な方法は、次のとおりです:bash /absolute/path/to/the/script
またはbash ./relative/path/to/the/script
。この方法では、実行可能ビットを設定する必要はありません。これは、bashによってのみ読み取られ、コンテンツを実行するためです。
それも設定できます現在のシェルセッションから直接起動できるように+ x(実行可能)に設定することもできます:/ absolute/path/to/the /スクリプト(または./relative/path/to/the/script)。注意:デフォルトでは、この方法で起動すると、入力したシェルまたはからposixシェルを介して起動されます(動作はOSに依存します)。そのため、実行されるはずのシェルではない可能性があります。そのため、スクリプトの最初の行として#!/ path/to/good/Shellを指定できます(そうする必要があります)。これにより、OSに対して、そのスクリプトが/ path/to/good/Shellによって実際に起動されることを示します。
実行可能:
実行可能ファイルは、起動されることになっているユーザー/グループに「x」ビットが設定されているファイルです。通常は「バイナリ」またはスクリプトです。
ヒント:file /some/file
は、ファイルの内容について詳しく教えてくれます。いくつかの例を見るには、file /usr/bin/bash
またはfile /etc/profile
を試してください。