Linux

/etc/profile 不是為使用者提供的

  • October 30, 2018

在我執行的 ubuntu 伺服器中,我在/etc/bash.bashrc和 中添加了自定義.sh文件/etc/profile.d,為我的使用者添加了一些有用的別名和功能。所有這些都為我的帳戶正確執行。

su但是,通過或登錄其他帳戶(包括與我相同組中的帳戶)ssh,這些自定義設置不會被載入。手動執行. /etc/profile就可以了,但是這應該在啟動時在互動式登錄 shell 中自動發生。echo $0從所有帳戶執行返回-bash,所以我認為它們實際上是在這樣的外殼中。

為什麼還會發生這種情況,我該如何解決?

and中的任何內容都在~/.profileand之後~/.bashrc執行。因此,如果第一個中設置的任何別名或變數具有相同的名稱,則它們將取代後者中設置的別名或變數。 /etc/profile``/bash.bashrc

對於這可能會有所幫助的人:我面臨的具體問題是因為我正在遷移伺服器,並且我已經要求我的使用者備份他們擁有的所有重要文件並將其放回新伺服器中。當他們這樣做時,他們包括~/.bashrc因為它具有“使 python 工作的技巧”(即它設置 PATH 變數以包含anaconda目錄),以及我在以前的伺服器中對他們的電腦進行的一些定制。這與我正在設置的新別名衝突(例如 的別名source activate,它變成了conda activate),並且從 conda 4.4 開始,conda.sh應該添加/etc/profiles.d/而不是手動設置 PATH 變數。

我遇到同樣的問題。我在檢查/etc/profile文件時找到了解決方案

...
if [ -d /etc/profile.d ]; then
 for i in /etc/profile.d/*.sh; do
   if [ -r $i ]; then
     . $i
   fi
 done
 unset i
fi

所以它只檢查**.sh**文件(Ubuntu 18)。我已將我的重命名/etc/profile.d/conda/etc/profile.d/conda.sh,現在它按預期工作!

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