Shell

未經適當許可不能擴展星號

  • February 13, 2016

有人可以向我解釋以下內容嗎?

$ 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/代替,但這並不能推廣到其他模式。

引用自:https://unix.stackexchange.com/questions/101847