如何在不使用 cd 或修改 PATH 的情況下從不同目錄執行可執行檔?

如何在不使用 cd 或修改 PATH 的情況下從不同目錄執行可執行檔?

存在與我想問的類似的變體,但我找不到確切的問題,所以我會在這裡問。

假設我有一個編譯.c文件,生成的可執行檔ex位於/mnt/f/C_F/ex.我可以很好地從內部執行它,/mnt/f/C_F但是./ex如果我想從/mnt/f比如說(或任何與此相關的目錄)執行它怎麼辦?我不想/mnt/f/C_F/為此添加到 PATH 中。

我找不到解決方案,我想這是不可能的。請確認這一點。

答案1

使用該檔案的絕對路徑。

/mnt/f/C_F/ex

無論您目前的工作目錄如何,這都應該始終有效。一般來說,出於這個原因,您可能應該更喜歡腳本中的絕對路徑(儘管有重要的例外)。

答案2

您始終可以使用可執行檔的相對路徑或完整路徑

當您進入 時/mnt/f,您可以運行:

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

答案3

任何小路1至包含至少一個/作品的可執行檔。命令名稱中存在的/字元告訴 shell 您正在要求它運行特定文件,並且您正在指定要找到該文件的特定位置。這是 shell 期望的語法的一部分;在大多數其他上下文中,(相對)路徑不包含字元是可以接受的/

對於不在目前目錄中的可執行文件,那是任何通往它的道路。如果不使用至少一個/.這使得在其他目錄中運行檔案變得更簡單,儘管它不太熟悉。

  • 絕對路徑- 喜歡/mnt/f/C_F/ex- 從...開始/

  • 相對路徑到另一個目錄中的檔案--C_F/ex當您在目錄中時/mnt/f- 始終包含 a /,即使它不在開頭。不帶 a 的相對路徑/只是一個檔案名,標識目前目錄中的檔案。 (但反之則不然。相對路徑可能包含/但仍引用目前目錄中的文件;請參見下文。)

    請注意,相對路徑如果要起作用,仍然必須實際引用您想要的文件,並且無論相對路徑是否引用您想要的文件取決於您目前所在的目錄,因為它們是相對於當前目錄解析的。

對於一個可執行檔在當前目錄中,最短相對路徑通常不起作用,因為它不包含/.因此,這是一個更複雜的情況,儘管它更熟悉。當您位於執行檔所在的目錄中時ex,您不能只執行ex,即使ex是該執行檔的完美相對路徑。

它不起作用的原因是不包含 a 的命令名稱/不會被視為相對路徑或任何路徑。反而,它被視為文件名並進行搜索在 中列出的目錄中$PATH2

這就是./ex當您與 位於同一目錄中時使用的原因ex每個目錄都包含一個.引用該目錄本身的條目。這提供了一種方法編寫一個相對路徑,該相對路徑標識相同的文件,ex但其中包含/,因此可用作 shell 視為路徑的命令名稱。

因此,前綴./並不是一種特殊的語法,而只是在當前目錄中寫入文件相對路徑的第二簡單方法,也是包含/.


1在這個答案中,我使用「路徑」來表示「路徑名」。這是「路徑」最常見的用法,但不是唯一的用法。我在這裡使用的術語“路徑”不應與可執行搜尋路徑,這是列出其路徑的目錄的集合,以:字元分隔,$PATH環境變數中

2不包含 a 的命令名稱/也可能被解析為非外部命令,例如 shell 內建命令和 shell 函數。

相關內容