私はC++ OS Xターミナルからプログラムをコンパイルしています:基本的なUNIX ./構文
> g++ a.cpp
私は、端末からプログラムを実行します。
> ./a.out
./
構文を何平均?これは何らかの形で./run
に関連していますか?
私はC++ OS Xターミナルからプログラムをコンパイルしています:基本的なUNIX ./構文
> g++ a.cpp
私は、端末からプログラムを実行します。
> ./a.out
./
構文を何平均?これは何らかの形で./run
に関連していますか?
.
は「現在のディレクトリ」を意味するので、./a.out
は「現在のディレクトリにa.out
という名前のファイル」を意味します。 a.out
と入力した場合は、./
が入力されていないと、現在のディレクトリではなく、パス($PATH
)のディレクトリを調べてプログラムを検索します。
ドットスラッシュは単なる相対パスです。これはシェルが現在の作業ディレクトリである "dot"ディレクトリからプログラムを実行するように指示しています。プログラムが実行ビットをセットしている場合(chmod + x a.out;通常はコンパイラがこれを処理します)にのみ動作します。
別の例を追加するには、 'ls。/'は親ディレクトリの内容をリストする 'ls ../'とは対照的に、現在のディレクトリの内容をリストします。 – Sean
すべてのシステムで、コマンドを入力するとき、システムはコマンドがどこにあるかを知る必要があります。プログラムを探すべき場所は、PATH
という名前の環境変数にリストされています。 Windowsはあなたが入っているディレクトリだけでなく、PATH
(以前は信じていましたが、かなり長い間Windowsを使用していませんでした)を検索し、現在のディレクトリに適切な名前の実行可能ファイルがあればそれを実行します。 Windowsは「機能」とみなし、残りのコンピュータコミュニティはそれを「セキュリティ上の欠陥」と見なしている。したがって、Unixライクな環境は、明示的にパスに置かれていない限り、現在のディレクトリを検索しません。 PATH
には明示的なパスを指定して実行できます。 Unixでは、 .
が現在のディレクトリであるため、./a.out
は、現在のディレクトリにあるプログラムa.out
を実行するようにシステムに指示します。
あなたの '$ PATH'に' .'があるかもしれませんが、それは悪い考えです。 '$ PATH'の前に' .'を置くことは特に危険です。次のように考えてください。 'cd/home/badguy; ls'ですが、 'badguy'は' rm -rf $ HOME'を実行する 'ls'という名前のスクリプトをホームディレクトリに持っています。 –