cd や PATH の変更を行わずに、別のディレクトリから実行可能ファイルを実行するにはどうすればよいですか?

cd や PATH の変更を行わずに、別のディレクトリから実行可能ファイルを実行するにはどうすればよいですか?

私が聞きたいことと似たようなバリエーションは存在しますが、正確な質問が見つからなかったので、ここで質問します。

.c実行可能ファイルを生成するコンパイル済みファイルがあるとしますex。これは で/mnt/f/C_F/ex内部から実行できますが、たとえば (または任意のディレクトリ) から実行したい場合はどうすればよいでしょうか。このために PATH に追加したくありません。/mnt/f/C_F./ex/mnt/f/mnt/f/C_F/

解決策が見つからず、おそらく不可能だと思います。ご確認ください。

答え1

そのファイルへの絶対パスを使用します。

/mnt/f/C_F/ex

これは、現在の作業ディレクトリに関係なく常に機能するはずです。一般に、この理由から、スクリプト内では絶対パスを使用することをお勧めします (ただし、重要な例外もあります)。

答え2

実行ファイルへの相対パスまたはフルパスをいつでも使用できます

にいるときは/mnt/f、以下を実行できます。

C_F/ex
# or
/mnt/f/C_F/ex

答え3

どれでもパス少なくとも 1 つの作品を含む実行可能ファイルに1 を/追加します。コマンド名に文字が含まれていると/、シェルは特定のファイルを実行するように要求していること、およびそのファイルが見つかる特定の場所を指定していることを知ります。これはシェルが期待する構文の一部です。他のほとんどのコンテキストでは、(相対) パスに/文字が含まれていなくても問題ありません。

現在のディレクトリにない実行ファイルの場合、それはそれへの道である少なくとも 1 つの を使用せずに、別のディレクトリにあるファイルのパスを書き込む方法はありません/。これにより、あまり馴染みがないものの、他のディレクトリにあるファイルを実行する方が簡単になります。

  • 絶対パス- のように/mnt/f/C_F/ex- 皮切りに/

  • 相対パス別のディレクトリのファイルに--C_F/exディレクトリ内にいる場合、先頭でなくても が/mnt/f常に含まれます。 のない相対パスは単なるファイル名であり、現在のディレクトリ内のファイルを示します。 (ただし、逆は当てはまりません。 相対パスに が含まれていても、現在のディレクトリ内のファイルを参照する場合があります。以下を参照してください。)///

    相対パスが機能するには、実際に必要なファイルを参照している必要があることに注意してください。また、相対パスが目的のファイルを参照しているかどうかは、現在どのディレクトリにいるかによって異なりますは現在のディレクトリを基準として解決されるためです。

実行ファイルの場合現在のディレクトリでは、 が含まれていないため、最短の相対パスは通常は機能しません/。したがって、これはより馴染みのあるケースではありますが、より複雑なケースです。実行可能ファイルが配置されているディレクトリにいる場合、 がその実行可能ファイルへの完全な相対パスであっても、exを単に実行することはできません。exex

動作しない理由は、を含まないコマンド名が/相対パスまたは任意のパスとして扱われないためです。代わりに、ファイル名として扱われ、検索されますリストされているディレクトリ内$PATH。2

./exと同じディレクトリにいるときにを使用するのはそのためですexすべてのディレクトリ.には、そのディレクトリ自体を参照するエントリが含まれています。方法を提供するexと同じファイルを識別するが、その中にが含まれる相対パスを記述し/、シェルがパスとして扱うコマンド名として使用できるようにします。

したがって、プレフィックス./は特別な構文ではなく、現在のディレクトリ内のファイルへの相対パスを記述する 2 番目に簡単な方法であり、. を含む方法の中で最も簡単な方法です/


1この回答では、「パス」を「パス名」の意味で使用しています。これは「パス」の最も一般的な用法ですが、唯一の用法ではありません。ここで使用する「パス」という用語を、実行可能検索パスは、パスが文字で区切られたディレクトリの集合です:$PATH環境変数で

2を含まないコマンド名は、/シェル組み込みコマンドやシェル関数などの非外部コマンドとして解決される場合もあります。

関連情報