Linux

為什麼即使正確指定了 $PATH,Bash 也無法找到命令?

  • November 25, 2021

我在文件**/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 ydisplaybash不會作為登錄 shell 啟動。然而它確實讀取了不同的啟動文件。Bash參考手冊說:

當 … 由 … sshd 執行。…它讀取並執行來自~/.bashrc

所以你應該把你的PATH設置放在~/.bashrc.

在大多數係統上,~/.bash_profilesources ~/.bashrc,所以你可以只把你的設置放在~/.bashrc而不是把它們放在兩個文件中。

沒有為所有使用者更改設置的標準方法,但大多數係統都有/etc/bashrc/etc/bash.bashrc或類似名稱。

如果做不到這一點,請設置pam_env並將PATH設置放入/etc/environment.

也可以看看:

引用自:https://unix.stackexchange.com/questions/46143