
我正在 shell 中玩耍並輸入 ./。我輸出以下內容:
bash: ./: Is a directory
它看起來像“./”檢查給定名稱的目錄是否存在。我試圖找到這方面的文檔,看看我的理解是否正確,但在網路上找不到任何內容。誰能給我解釋一下這個嗎?
答案1
Bash 手冊中可能找不到對此的一般定義,但是POSIX 規範(路徑名解析部分):
特殊檔案名點應引用其前身指定的目錄。
那麼,如果我們只有前身的話,前身是什麼.
?我強調了重要的部分:
如果路徑名不以斜線開頭,則路徑名的第一個檔案名稱的前身應被視為目前工作目錄過程的
也,
至少包含一個非斜線字元且以一個或多個尾部斜線結尾的路徑名應像在路徑名中附加一個點字元 ( '.' ) 一樣進行解析
因此,當您鍵入時,./
它會解析為./.
,它基本上指向您當前的工作目錄。當您在 shell 中鍵入內容並點擊 時Enter,shell 將嘗試將第一部分作為命令執行。 (基本上是第一組字符,直到第一個空格。)
沒有名為 的命令或可執行文件./.
,因此它將失敗並告訴您./
「是一個目錄」。有趣的是,.
是一個命令(它是一個內建命令,也稱為source
),因此當您只需鍵入時,.
您將得到:bash: .: filename argument required
。
答案2
正如其他人所寫,./
是當前目錄的名稱。當您./
在 bash 提示字元下鍵入並按 Enter 鍵時,您嘗試將當前目錄作為命令執行,這當然失敗了,並且 bash 給出了訊息(解釋):「我不能這樣做。./
是一個目錄,我無法將目錄作為命令執行。
答案3
表示.
目前目錄。您可以將其用作./
當前目錄中任何文件的前綴。
同樣,..
表示上一個(更高)目錄。它經常在進入更高級別的目錄時使用,例如cd ../../../
給定一個包含以下內容的檔案系統:
# Comments start with a hash and aren't parsed
/ # root directory
/foo/ # first level directory
/foo/bar/ # second level directory
/foo/bar/baz # third level directory
/foo/bar/baz/qux # a file in the third level directory
如果你處於第三級主管(baz),並且你運行ls
,你會看到qux
。如果您運行ls .
,您將獲得相同的輸出,以及如果您運行ls ./
。
如果你在第三級主管(baz),並且你跑ls ..
並且ls ../
都給你baz
。即上一級目錄的內容。
答案4
在 Linux 中 ./ 表示目前目錄(../ 表示父目錄)。
如果你執行 ls -a 你會看到。和 .. 列為目錄(您需要 -a 因為 . 代表隱藏目錄)