題 OSX Lion的$ PATH問題


我在從終端運行mysql時遇到一些問題:

macmini:~ michael$ which mysql
/Applications/XAMPP/xamppfiles/bin/mysql
macmini:~ michael$ mysql
-bash: /usr/local/mysql/bin/mysql: No such file or directory

我之前在/ usr / local / mysql / bin / mysql安裝了一個不再存在的安裝。

我的路徑變量如下:

macmini:~ michael$ echo $PATH
/usr/bin:/bin:/usr/sbin:/sbin:/Applications/XAMPP/xamppfiles/bin/:/usr/local/bin:/usr/X11/bin:/usr/local/MacGPG2/bin:/usr/texbin

刪除到root似乎正常運行:

macmini:~ michael$ sudo bash
Password:
bash-3.2# mysql
Welcome to the MySQL monitor.  Commands end with ; or \g.
Your MySQL connection id is 66
Server version: 5.1.44 Source distribution

Type 'help;' or '\h' for help. Type '\c' to clear the current input statement.

mysql>

我似乎找到了問題 - 但我不確定如何更改或刪除此別名

macmini:~ michael$ type -a mysql
mysql is aliased to `/usr/local/mysql/bin/mysql'
mysql is /Applications/XAMPP/xamppfiles/bin/mysql
mysql is /Applications/XAMPP/xamppfiles/bin/mysql

3
2018-06-25 13:27


起源


沒有鏈接,調用它的完整路徑工作正常,來自sudo bash的mysql是XAMPP中的mysql - Mikey
是否 which -a mysql 還是顯示舊的可執行文件? - slhck
它顯示這些: /Applications/XAMPP/xamppfiles/bin/mysql,/Applications/XAMPP/xamppfiles/bin//mysql 第二個看起來很腥! - Mikey
它看起來確實很奇怪。應該只有其中一個 - 儘管仍然沒有提及你的 /usr/local/mysql 餘。你有沒有 全然 刪除那一個?並且,可能已退出並重新登錄? - slhck
我發現了這個問題 type -a mysql  - 現在我只需要弄清楚如何刪除這第一個條目! - Mikey


答案:


校驗 ~/.bash_profile 要么 ~/.profile 對於這樣的命令:

alias mysql='/usr/local/mysql/bin/mysql'

刪除它,然後重新加載外殼。


3
2018-06-25 14:52



我沒有.bash_profile,我的.profile中的所有內容都是: export PATH=/Applications/XAMPP/xamppfiles/bin:$PATH - Mikey
每 man bash 只有 /etc/profile, ~/.bash_profile 和 ~/.profile 哪個bash會在你的情況下讀。您確定沒有採購任何其他配置文件嗎?如果您尚未修改任何這些文件,那麼我不知道該別名來自何處。你有沒有重新裝載你的終端?它適用於你 unalias mysql? - slhck
unalias mysql做了訣竅:D謝謝 - Mikey
請注意,這不會永遠持續下去 - 如果再次創建該別名,則每次都必須使用unalias。你可以添加 unalias 一個shell的啟動腳本,但這只會治愈症狀,而不是原因。您可以搜索所有文件 alias 看看它在哪裡設置。 - slhck


嘗試 hash mysql 要么 hash -r 清除命令查找結構:

hash [-lr] [-p filename] [-dt] [name]

對於每個名稱,命令的完整文件名是通過搜索$ PATH中的目錄並記住來確定的。如果提供了-p選項,則不執行路徑搜索,並且filename用作命令的完整文件名。 -r選項使shell忘記所有記住的位置。 -d選項使shell忘記每個名稱的記憶位置。如果提供了-t選項,則打印每個名稱對應的完整路徑名。如果使用-t提供了多個名稱參數,則在散列完整路徑名之前打印名稱。 -l選項使輸出以可以重用為輸入的格式顯示。如果未給出參數,或者僅提供-l,則打印有關記住命令的信息。除非找不到名稱或提供了無效選項,否則返回狀態為true。

請注意,您可以使用 hash -t mysql 驗證緩存的路徑查找是否確實不正確。

如果 hash -t 表明將選擇正確的路徑並且事情仍然不起作用,下一步是檢查別名和功能。測試別名:

alias mysql

這將打印 -bash: alias: mysql: not found 或顯示別名定義。如果有的話 mysql 定義別名,你必須在它中grep ~/.bash*~/.profile 和 /etc/profile 文件。

檢查bash函數定義:

shopt -s extdebug
typeset -fF mysql
shopt -u extdebug

這設定了 extdebug shell選項,然後請求bash函數 mysql 如果存在,將包括定義為的位置 mysql 42 /Users/foo/.bash_profile 或類似的(功能名稱,行號,文件)。

如果存在別名或函數,請將其從定義它的文件中刪除,並可選擇將其從當前shell中刪除:

unalias mysql
unset -f mysql

unalias 刪除別名定義, unset -f 一個函數定義。


0
2018-06-25 13:32



沒運氣 :( macmini:~ michael$ hash mysql macmini:~ michael$ mysql -bash: /usr/local/mysql/bin/mysql: No such file or directory macmini:~ michael$ hash -r macmini:~ michael$ mysql -bash: /usr/local/mysql/bin/mysql: No such file or directory macmini:~ michael$ hash -t mysql -bash: hash: mysql: not found - Mikey
如果你設置一個完整的路徑怎麼辦? hash -p /Applications/XAMPP/xamppfiles/bin/mysql mysql? - Martijn Pieters
macmini:~ michael$ hash -t mysql /Applications/XAMPP/xamppfiles/bin/mysql 它現在顯示,但正在運行 mysql 導致同樣的錯誤 - Mikey
那麼這不是bash或路徑錯誤。 - Martijn Pieters
還有什麼呢?賽跑 macmini:~ michael$ /Applications/XAMPP/xamppfiles/bin/mysql Welcome to the MySQL monitor. Commands end with ; or \g. ... 直接工作正常 - Mikey