2012-03-11 25 views
0

私はC++ OS Xターミナルからプログラムをコンパイルしています:基本的なUNIX ./構文

> g++ a.cpp 

私は、端末からプログラムを実行します。

> ./a.out 

./構文を何平均?これは何らかの形で./runに関連していますか?

答えて

7

.は「現在のディレクトリ」を意味するので、./a.outは「現在のディレクトリにa.outという名前のファイル」を意味します。 a.outと入力した場合は、./が入力されていないと、現在のディレクトリではなく、パス($PATH)のディレクトリを調べてプログラムを検索します。

+0

あなたの '$ PATH'に' .'があるかもしれませんが、それは悪い考えです。 '$ PATH'の前に' .'を置くことは特に危険です。次のように考えてください。 'cd/home/badguy; ls'ですが、 'badguy'は' rm -rf $ HOME'を実行する 'ls'という名前のスクリプトをホームディレクトリに持っています。 –

2

ドットスラッシュは単なる相対パスです。これはシェルが現在の作業ディレクトリである "dot"ディレクトリからプログラムを実行するように指示しています。プログラムが実行ビットをセットしている場合(chmod + x a.out;通常はコンパイラがこれを処理します)にのみ動作します。

+1

別の例を追加するには、 'ls。/'は親ディレクトリの内容をリストする 'ls ../'とは対照的に、現在のディレクトリの内容をリストします。 – Sean

1

すべてのシステムで、コマンドを入力するとき、システムはコマンドがどこにあるかを知る必要があります。プログラムを探すべき場所は、PATHという名前の環境変数にリストされています。 Windowsはあなたが入っているディレクトリだけでなく、PATH(以前は信じていましたが、かなり長い間Windowsを使用していませんでした)を検索し、現在のディレクトリに適切な名前の実行可能ファイルがあればそれを実行します。 Windowsは「機能」とみなし、残りのコンピュータコミュニティはそれを「セキュリティ上の欠陥」と見なしている。したがって、Unixライクな環境は、明示的にパスに置かれていない限り、現在のディレクトリを検索しません。 PATHには明示的なパスを指定して実行できます。 Unixでは、 .が現在のディレクトリであるため、./a.outは、現在のディレクトリにあるプログラムa.outを実行するようにシステムに指示します。