![](/img/trans.png)
[英]Why doesn't the execve command in C on macOS allow the 'which' command to work?
[英]which command doesn't work on my computer
過去,我們使用“which”命令來獲取計算機上相關軟件的信息,例如:
which python
which git
但現在它似乎不適用於我的 MacOS Mojave。 我的設置有問題嗎?
新版:結果會變成這樣
AA:~ AA$ which python
/usr/bin/which: illegal option -- -
usage: which [-as] program ...
新版2:
AA:~ AA$ type --all which
which is aliased to `alias | /usr/bin/which --tty-only --read-alias --show-dot --show-tilde'
which is /usr/bin/which
AA:~ AA$ type -all python
python is /Users/AA/anaconda3/bin/python
python is /Users/AA/anaconda/bin/python
python is /usr/bin/python
AA:~ AA$
別名是導致錯誤消息的原因。 顯然,別名定義對您的系統來說是錯誤的。 不清楚是什么定義了這個別名或為什么; 它在幾個層面上似乎是錯誤的,所以我懷疑它是標准安裝的一部分。
您可以使用unalias which
刪除別名; 但我猜它是在你的一個啟動文件中定義的,應該從那里刪除 - 在這一點之后,下次登錄時它應該消失了。
但無論如何,您不應該使用which
- 最好讓自己習慣 POSIX 標准命令type
。 它是專門為了取代which
而引入的which
但顯然仍然很難從人們的腦海中根除舊的命令。
對我來說,這是yarn global upgrade
某些內容替換了我系統的/usr/bin/which
。
/usr/bin/which -> ../local/share/.config/yarn/global/node_modules/.bin/which
由於您的錯誤消息與該程序中的文本字符串完全相同,因此您的問題可能來自類似的來源。
console.error('which: illegal option -- ' + flag)
console.error('usage: which [-as] program ...')
通過系統的包管理器重新安裝which
來“修復”(例如sudo dnf reinstall which
)。 這現在可能會干擾依賴於它的任何 JavaScript 包,但我計划刪除這些全局變量,所以我不會發現。
更好的修復:我覺得我的系統現在很臟,需要檢查它的所有 bin 文件......比較/usr/local/share/.config/yarn/global/node_modules/.bin
所有內容,看看它是否有等效的在/usr/bin
中查找其他干擾點似乎是一種足夠簡單的方法。
for x in $(ls /usr/local/share/.config/yarn/global/node_modules/.bin/*); do
ls -l /usr/bin/"$(basename "${x}")"
done
然后可以使用如下命令針對系統的包管理器檢查這些。 然后根據需要重新安裝。
sudo dnf info ...
sudo dnf provides ...
更多的:
對我來說似乎很奇怪它會允許破壞現有的系統程序。 至少,我希望它使用/usr/local/bin
代替。 額外的系統和類似系統的包管理似乎是他們在紗線 2(漿果)中取消yarn global
原因。
我有sudo yarn global list
和yarn global list
不同包。 也許在某個時候使用sudo
是我的錯誤?
PS 感謝@tripleee ,我不知道type
。 我已經看到了各種其他方法來嘗試處理不同的which
程序和不同版本的which
,以及像test
這樣的替代方案(以及其他我忘記的方法),但是type
看起來值得嘗試作為替代。
PPS 發現這個操作系統配置為通過它運行選項卡完成很煩人。
PPPS 是的,我知道使用輸出ls
編寫腳本是一個壞習慣。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.