為什麼即使正確指定了 $PATH,Bash 也無法找到命令?
我在文件**/etc/profile**中指定了我的命令的路徑:
export PATH=$PATH:/usr/app/cpn/bin
我的命令位於:
$ which ydisplay /usr/app/cpn/bin/ydisplay
所以,當我執行“echo $PATH”時,輸出看起來像:
$ echo $PATH ...:/usr/app/cpn/bin
一切正常,但是當我嘗試通過 SSH 啟動命令時出現錯誤:
$ ssh 127.0.0.1 ydisplay $ bash: ydisplay: command not found
但是我的路徑仍然存在:
$ ssh 127.0.0.1 echo $PATH ...:/usr/app/cpn/bin
請解釋為什麼 Bash 在 SSH 會話期間無法找到 ydisplay 以及如何正確配置 SSH 以避免此問題。
此外,如果我在目前使用者的本地文件 .bashrc 中指定 $PATH 一切正常。但我只想修改一個文件,而不是為每個使用者指定很多文件。這就是我問的原因。
tl;博士
執行
ssh 127.0.0.1 ydisplay
源~/.bashrc
而不是/etc/profile
. 改變你的路徑~/.bashrc
。細節
唯一
/etc/profile
的讀取時間是您的 shell 是“登錄 shell”。來自Bash 參考手冊:
當 bash 作為登錄 shell 呼叫時,…它首先從文件 /etc/profile 讀取並執行命令
但是當你執行時
ssh 127.0.0.1 ydisplay
,bash
不會作為登錄 shell 啟動。然而它確實讀取了不同的啟動文件。Bash參考手冊說:當 … 由 … sshd 執行。…它讀取並執行來自
~/.bashrc
所以你應該把你的
PATH
設置放在~/.bashrc
.在大多數係統上,
~/.bash_profile
sources~/.bashrc
,所以你可以只把你的設置放在~/.bashrc
而不是把它們放在兩個文件中。沒有為所有使用者更改設置的標準方法,但大多數係統都有
/etc/bashrc
、/etc/bash.bashrc
或類似名稱。如果做不到這一點,請設置
pam_env
並將PATH
設置放入/etc/environment
.也可以看看: