2012-03-11 61 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'在他的主目錄下有一個名爲'ls'的腳本,它執行'rm -rf $ HOME'。 – 2013-08-06 23:19:02

2

點斜線只是一個相對路徑;它告訴shell從「dot」目錄運行程序,也就是當前的工作目錄。它只在程序執行位設置(chmod + x a.out;編譯器通常會爲你處理)時才起作用。

+1

增加另一個例子:'ls。/'列出當前目錄的內容,而不是'ls ../'列出父目錄的內容。 – Sean 2012-03-11 20:00:54

1

在所有系統中,當您鍵入命令時,系統需要知道命令的位置。它應該查找該程序的位置列在名爲PATH的環境變量中。 Windows會搜索您所在的目錄以及PATH(我相信之前,但我在相當一段時間內沒有使用Windows),並且如果它在當前目錄中找到具有正確名稱的可執行文件,它將執行它。 Windows認爲「功能」,計算機社區的其他人將其視爲「安全漏洞」。因此,類似Unix的環境不會搜索當前目錄,除非它明確地放在路徑中。通過給它一個明確的路徑,你可以運行一些不在PATH中的東西。在Unix中, .是當前目錄,所以./a.out告訴系統執行在當前目錄中找到的程序a.out