2009-05-28 3 views
19

UNIXコマンドラインでは、単に名前を入力するだけでプログラムを実行するのと比べて、何かを入力してプログラムを実行するのと比べてどのような違いがありますか?プログラム名の後にドット(ドット)を付けますか?例えば: "source" または "." は、現在のプロセスで実行するコマンドを起こし使用unixコマンドラインはで実行します。 (ドット)対なし

runme 

. runme 
+0

私がPuTTy端末で2番目のことをすると、それは閉じます... – schnaader

+0

関連:http://superuser.com/questions/176783/what-is-the-difference-between-executing-a-bash-script - と - ソーシング - a bashのscrip/176788#176788 – lesmana

答えて

24

. nameは、現在のシェルにnameというファイルを出力します。ファイルがこの

A=hello 

が含まれている場合、あなたはそれをソースするのであればその後、その後、あなたはこんにちはが含まれていますAと呼ばれる変数を参照することができます。あなたは(適切な実行権と#!/interpreterライン与えられた)ファイルを実行した場合でも、そのようなことは、スクリプトのセットのみに影響しますそのは、それがで実行されてサブシェル。

ソーシングを変数と他のもののため、動作しません。バイナリファイルは意味をなさないでしょう:シェルは、バイナリファイルをどのように解釈するのか分からないでしょう(それは、そのファイルに現れるものを現在のシェルに挿入することを覚えています - これはCの古い#include <file>メカニズムとよく似ています)。例:バイナリファイルを実行する

head -c 10 /dev/urandom > foo.sh; . foo.sh # don't do this at home! 
bash: �ǻD$�/�: file or directory not found 

は、しかし、はもちろん、多くの意味を作るん。したがって通常は実行するファイルに名前を付けるだけで、特別な場合は上記のA=helloのようにファイルをソースにしたいとします。

15

。スクリプトを実行可能ファイルとして実行すると、独自のプロセスが得られます。

現在のシェル(別のプロセスでは実行できません)で環境変数を設定しようとしている場合や、シェルを中断せずにスクリプトを中断したい場合には、これが最も重要です。のみ別のプロセス)。

+0

そのプロセスの区別は私のためにすべてを明らかにした。 – Kvass

5

最初のコマンドが実行されます。もう一つは、シェルスクリプトを別のシェルスクリプトの中に入れるための略語です。

4

この構文は、スクリプトを読み込んで解析するために使用されます。それは他のスクリプトの束と共通の機能を持つスクリプトを持っていて、それを「インクルード」するだけで大​​変便利です。詳細は、http://tldp.org/LDP/abs/html/internal.htmlを参照してください(「ドット」コマンドまでスクロールしてください)。

+0

dotコマンドに関するリンクについて+1 - > 'このコマンドは、コマンドラインから呼び出されたときにスクリプトを実行します。スクリプト内では、ソースファイル名がfile-nameファイルをロードします。ファイルを取得する(ドットコマンド)と、スクリプトにコードをインポートします(Cプログラムの#includeディレクティブと同じ効果)。正味の結果は、ソースコードがスクリプト本体に物理的に存在する場合と同じです。これは、複数のスクリプトが共通のデータファイルまたは関数ライブラリを使用する場合に便利です。 – Levit

4

"runme"を実行すると、気が散る小さなプロセスになり、シェルに影響を与えない新しいプロセスが作成されます。

"。runme"を実行すると、スクリプト "runme"が環境変数を変更したり、ディレクトリを変更したり、あなたのためにやりたいことがあるすべての種類のものを変更することができます。すでに実行しているシェルプロセスによって解釈されているため、これを行うことしかできません。その結果、ログインシェルとしてbashを実行している場合は、「。」だけを使用できます。 bashスクリプトではなく、(例えば)Cシェルスクリプト上のバイナリで表記します。

関連する問題