Shell
未經適當許可不能擴展星號
有人可以向我解釋以下內容嗎?
$ ls -ld /temp/sit/build/ dr-xr-s--- 3 asdf qwer 4096 Jan 31 2012 /temp/sit/build/ $ ls -ld /temp/sit/build/* ls: /temp/sit/build/*: Permission denied
所以顯然,我不能在這裡使用星號。我已經用 sudo 命令嘗試過了,我得到一個“沒有這樣的文件”錯誤,而不是“權限被拒絕”……
sudo ls -l /temp/sit/build/* ls: /temp/sit/build/batch*: No such file or directory
但如果我不使用*,它最終會起作用
sudo ls -l /temp/sit/build/ total 4 dr-xr-s--- 11 asdf qwer 4096 Oct 3 23:31 file
進行萬用字元擴展的
*
shell 是您鍵入它的 shell。如果 shell 有權讀取目錄中的文件列表,則它會擴展/temp/sit/build/*
為/temp/sit/build/file
,並使用sudo
參數ls
和執行。如果 shell 無法找到任何匹配項(無論是因為沒有匹配項,還是因為 shell 無權查看匹配項),那麼它將不理會模式,並使用參數和呼叫。-l``/temp/sit/build/file``/temp/sit/build/*``sudo``ls``-l``/temp/sit/build/*
由於沒有名為 的文件,因此如果您將該名稱傳遞給該命令
/temp/sit/build/*
,則該命令會報錯。ls
回想一下,ls
不擴展萬用字元,那是 shell 的工作。如果您希望萬用字元擴展發生在您沒有讀取權限的目錄中,則擴展必鬚髮生在由 啟動的 shell 中,
sudo
而不是在呼叫sudo
.sudo
不會自動啟動 shell,您需要明確地執行此操作。sudo sh -c 'ls -l /temp/sit/build/*'
當然,您可以在這裡
sudo ls -l /temp/sit/build/
代替,但這並不能推廣到其他模式。