簡體   English   中英

哪個命令在我的電腦上不起作用

[英]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 listyarn global list不同包。 也許在某個時候使用sudo是我的錯誤?


PS 感謝@tripleee ,我不知道type 我已經看到了各種其他方法來嘗試處理不同的which程序和不同版本的which ,以及像test這樣的替代方案(以及其他我忘記的方法),但是type看起來值得嘗試作為替代。

PPS 發現這個操作系統配置為通過它運行選項卡完成很煩人。

PPPS 是的,我知道使用輸出ls編寫腳本是一個壞習慣。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM