私たちが使う理由./Linuxでコンパイルされたコードを実行する前に?コンパイルされたコードよりも親ディレクトリにある場合は不要です。たとえば、説明します。私のコードがある場合/ホーム/名前/コード、そして私も同じディレクトリにあったので、次のものを使用しなければなりませんでした。./a.出力。しかし、私がそうであれば/家/名前/それから私は使えます。./コード/a.out。ここで私は使う./しかし、私の考えでは、コードを実行する必要があることを示すよりも、ディレクトリを探索する方が重要だと思います。では、なぜ使用すべきですか?./コードと同じディレクトリにある場合は、コンパイルされたコードを実行しますか?
答え1
コマンドを実行すると、シェルはフルパスを指定せずにコマンドを呼び出すことができるようにするトリックを使用します。シェルは環境変数にリストされている各ディレクトリでコマンドを検索し$PATH
、見つかった場合はコマンドの実行をスケジュールします。
ディレクトリの1つにないコマンドを実行するには、$PATH
シェルにファイルを見つけるためのヒントを提供する必要があります。あなたの例では行って/home/uname/code
いないので、$PATH
実行したいファイルを見つけるのに十分なパス情報をシェルに提供する必要があります。これは、現在の作業ディレクトリがファイルのあるディレクトリであるか他のディレクトリであるかにかかわらず同じです。実行したいファイルと同じディレクトリにある場合は、./
ファイル名の前にあるものだけでシェルにファイルが見つかる場所を知らせるのに十分です。
答え2
シェルへの入力は、絶対か相対に関係なく、常に実行可能ファイルへのパスです。ディレクトリパス/ファイル名で構成する必要があります。現在のディレクトリで実行可能ファイル名のみを指定すると、シェルは入力した文字列の前に自動的に接頭辞を付けます$PATH
。そのため、常にパスを入力する必要があります。
ちなみに、あなたのコードがにあり、/home/uname/code/
あなたがにある場合、/home/uname/
必ずしも使用する必要はありません。
./コード/a.outただ使用することもできます
コード/a.outなぜなら、このパスも相対パスであるからです。
答え3
実行可能ファイルが見つからない場合、which
シェルでもそれが見つかりません。
which ./a.out
動作します。which ./code/a.out
実行可能ファイルのフルパスを印刷しますがwhich a.out
。
他の人が指摘したように、PATH
問題のプログラムを呼び出す前に環境変数を変更すると機能します。
たとえば、次のようになりますbash
。
[uname@host:/home/uname/code]$ echo $PATH
/usr/bin:/bin
[uname@host:/home/uname/code]$ which a.out
which: no a.out in (/usr/bin:/bin)
[uname@host:/home/uname/code]$ which ./a.out
/home/uname/code/a.out
# add present directory to path
[uname@host:/home/uname/code]$ export PATH="${PWD}:${PATH}"
[uname@host:/home/uname/code]$ echo $PATH
/home/uname/code:/usr/bin:/bin
[uname@host:/home/uname/code]$ which a.out
/home/uname/code/a.out