Bash
腳本中的路徑與實際路徑不同
當我
echo $PATH
在終端視窗中時,它會輸出:/home/charles/anaconda3/bin: /home/charles/anaconda3/condabin: /usr/local/sbin:/usr/local/bin: /usr/sbin:/usr/bin:/sbin:/bin:/usr/games: /usr/local/games:/snap/bin:/snap/bin: /home/charles/.emacs.d/bin
但是當我執行腳本時(不是以 root 身份):
#!/bin/sh echo $PATH
它只輸出根路徑,而不是我的主目錄中的路徑:
/usr/local/sbin:/usr/local/bin: /usr/sbin:/usr/bin:/sbin:/bin:/usr/games: /usr/local/games:/snap/bin:/snap/bin
我正在嘗試
spyder
從腳本啟動,該腳本來自:$ which spyder /home/charles/anaconda3/bin/spyder
有沒有辦法讓腳本辨識我的主目錄中的路徑部分?
已解決:我將添加的程式碼
emacs
和anaconda
路徑從~/.bashrc
to 移到~/.profile
.
您的腳本在子 shell 中執行 - 這意味著它是由您的互動式/登錄 shell 生成的。子shell 是為執行腳本/程序的明確目的而產生的shell。子shell 的規則之一是它可以訪問*“父shell”*設置的全域變數,但不能訪問局部變數。
這表明
/home/...
變數是局部變數,這意味著您將它們設置在某處/以某種方式 - 也許在~/.bashrc
?解決方案是您必須在腳本中聲明本地 PATH 變數。你可以這樣做:
export PATH="$PATH:/home/charles/anaconda3/bin:/home/charles/anaconda3/condabin:/home/charles/.emacs.d/bin"
此 PATH 現在對於您的腳本/子 shell 來說是本地的,並且不會作為全域變數傳播。