私はこのサイトでこの質問を見たので、この質問をするよう促されました。実行可能ファイルとシェルスクリプトの違いは何ですか?
私はこのサイトでこの質問を見たので、この質問をするよう促されました。実行可能ファイルとシェルスクリプトの違いは何ですか?
回答:
スクリプトはどのファイルです。
シェルスクリプトは、そのインタプリタであるスクリプトであるシェル。UNIXの世界では、「シェル」はBourneシェルに似たシェルのファミリーを指します。最近のそのようなシェル(ash、bash、ksh、zsh、…)は、POSIXシェル標準に準拠しています。より一般的には、「シェル」という単語には、csh、tcsh、fishなどの他のコマンドインタープリタが含まれることがあります。
実行可能ファイルは、実行可能な任意のファイルです。効果的に実行可能にするために、ファイルには次の2つのプロパティが必要です。
ls -l
:x
文字が許可列に存在している必要があります。ファイルの形式は、システムが実行可能ファイルとして認識するものでなければなりません。実行可能な形式は、いくつかのカテゴリに分類できます。
#!
ファイルです。このようなファイルを実行するために、カーネルはインタープリタープログラムを実行し、引数としてスクリプトへのパスを渡します。実行可能であることはシステムに依存することに注意してください。たとえば、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(実行ファイル)を使用して、現在のシェルセッションから直接それを起動できるようにするには:/絶対/パス/に/ /スクリプト(または./relative/path/to/the/script)。注意:デフォルトでは、この方法で起動すると、入力したシェルまたは posixシェル(動作はOSに依存します)を介して起動されるため、実行されるはずのシェルではない可能性があります。そのため、スクリプトの最初の行として#!/ path / to / good / shellを指定できます(そうする必要があります)。これは、そのスクリプトが/ path / to / good / shellによって実際に起動されることをOSに示します。
実行可能ファイル:
実行可能ファイルは、起動されることになっているユーザー/グループに「x」ビットが設定されているファイルです。通常は「バイナリ」またはスクリプトです。
ヒント:file /some/file
ファイルの内容について詳しく知ることができます。試してみてくださいfile /usr/bin/bash
または file /etc/profile
いくつかの例を参照してください。