Environment-Variables
重命名並添加到 $PATH
我知道我可以使用命令在 bash 終端上添加 $PATH 的路徑
PATH=$PATH:foo
。我也知道我可以使用命令為 bash 創建別名alias a=b
但只知道我注意到 bash 的別名不是全域別名,並且某些工具可能無法找到(這是非常合理的,如果文件說工具只是搜尋另一個依賴項的路徑)。那麼如何使用不同的名稱將內容添加到路徑中,以便其他所有命令行工具都能輕鬆找到它?我可以為我的問題想到至少三個用途
$$ g++9 as default (this can be solved with update alternatives), python 3 as default and not 2 $$但是當我嘗試將bazelisk安裝為 bazel 時出現了我的主要問題,因為
tensorflow
需要按源配置建構bazel
,對於我在預設目錄中安裝的資訊bazel
,go
即~/go/bin/bazelisk
你可以分兩步做到這一點:
- 確保您的路徑以您要在其中提供“別名”名稱的目錄開頭。例如,我們可以使用
bin/
目錄中的$HOME
目錄:export PATH=$HOME/bin:$PATH
- 將別名作為符號連結放入該目錄。例如,要創建一個別名
python
,python3
執行ln -s $(which python3) $HOME/bin/python
筆記:
- 你不需
root
要這樣做。- 執行此操作時要小心。做“奇怪”的事情
ln -s /bin/cat $HOME/bin/ls
會適得其反,就像與鄰居交談並將汽車稱為魚一樣。- 您的“別名”目錄不需要特殊名稱。我們不是在這裡發明一個新概念,我們只是直接使用
$PATH
工作原理。- 如果您的“別名”目錄位於最後一個,它將不起作用
$PATH
,它必須是第一個。- 不要替換
which
為command -v
.command -v
將行為不端:它將列印別名,列印沒有路徑的 shell-builtin 命令,並且在無法創建符號連結的這種情況下,它會成功給出錯誤的結果,而which
會可靠地返回一個空字元串並將退出狀態設置為1
, 允許 shell 腳本使用if alias=$(which python3) ; then ln -s $alias ~/bin/python ; fi
. 或者只是通過使用失敗set -e; alias=$(which python3); ln -s $alias ~/bin/python
。command -v
在使用別名和 shell 內置命令的情況下,使用會給出錯誤的結果。