
我在 Red Hat Linux 的終端機上閒逛,當我輸入星號 ( *
) 並按下回車鍵時,它執行了我目錄中的一個程式。為什麼?
我最好的猜測是 Unix 將其視為通配符,因此它執行了第一個字母程式。由於my_program.exe
和one_of_my_programs.program
可以透過簡單地鍵入檔案名稱來執行,因此通配符運算子代表所有可能的檔案。由於程式首先按字母順序排列,因此 Unix 會執行它。這是正確的判斷嗎?
答案1
你的解釋是正確的。其餘文件將作為其參數清單顯示。
請注意,僅當程式設定了可執行位元並且當前目錄位於清單中時,它才會執行此操作PATH
。
一些可能有助於理解的註解:-
- 如果您鍵入
./*
,則PATH
不需要輸入該條目。 - 如果您鍵入
. *
或. ./*
第一個符合的檔案是腳本,則它不需要是可執行的,也不需要目前目錄位於PATH
(對於除 之外的 shell 可能不是這樣bash
)。
答案2
這表示這.
是您變數的一部分PATH
。出於安全原因,這確實是一個糟糕的主意(當然,Windows 必須將其設定為不可修改的預設值)。
然而,這個「建議」只是稍微有效:如果您rm
在當前目錄中有一個名為的文件,*
那麼執行以下命令就可以了預設 rm
:
/tmp$ mkdir ohno
/tmp$ cd ohno
/tmp/ohno$
/tmp/ohno$ ls
/tmp/ohno$ touch rm what
/tmp/ohno$ ls
rm what
/tmp/ohno$ *
/tmp/ohno$ ls
rm
/tmp/ohno$
正如您所看到的,它不是rm
在當前目錄(一個空且不可執行的文件)中執行的,而是在系統的預設/bin/rm
.
當涉及通配符時,請務必仔細檢查您的命令。這是有史以來讀過的最可怕的消息之一:
rm: cannot remove '.o': No such file or directory
這是調用的結果
rm * .o
,或多或少是人們能想到的最糟糕的雜散空間佈局。