我執行以下命令在 CentOS 7.9 中建立別名檔案:
echo 'alias ll="ls -alhF --color=auto"' > /etc/profile.d/alias-ll.sh
然後,一旦我重新啟動 shell,「type ll」表示該別名不起作用。我認為這可能是由於 /etc/profile.d 中的另一個檔案覆蓋了別名,因此我將該檔案重新命名為「z-alias-ll.sh」。然後我重新啟動 shell,這一次,「type ll」表明別名已成功工作。
然而,當我在 Ubuntu 20.04 中執行相同操作時,「type ll」表示它不起作用。 Ubuntu 中的 /etc/profile.d 中有一些檔案名,例如“Z99-cloud-locale-test.sh”和“Z99-cloudinit-warnings.sh”,所以我嘗試了這些:
echo 'alias ll="ls -alhF --color=auto"' > /etc/profile.d/Z99-alias-ll.sh
echo 'alias ll="ls -alhF --color=auto"' > /etc/profile.d/ZZ99-alias-ll.sh
echo 'alias ll="ls -alhF --color=auto"' > /etc/profile.d/Z99-z-alias-ll.sh
echo 'alias ll="ls -alhF --color=auto"' > /etc/profile.d/ZZ99-z-alias-ll.sh
echo 'alias ll="ls -alhF --color=auto"' > /etc/profile.d/Z99Zalias-ll.sh
然而,當我重新啟動終端時,「type ll」仍然顯示「ll 的別名為『ls -alF』」。
如果我建立另一個別名檔案:
echo 'alias lltest="ls -alhF --color=auto"' > /etc/profile.d/alias-lltest.sh
然後,在我重新啟動終端機後,「type lltest」表示正在取得該檔案。因此,我認為 /etc/profile.d 中的別名檔案正在被獲取,但「ll」的別名正在被覆蓋。
由於我嘗試使用“ZZ99”等前綴。從優先。然而,我並不能100%確定。
哪些檔案、腳本等可能優先於我在 /etc/profile.d 中建立的別名檔案?在定義環境變數方面,Ubuntu 中什麼優先於 /etc/profile.d?
我使用新的 Digital Ocean Droplet 嘗試了 Ubuntu 20.04 和 Ubuntu 22.10。
答案1
通常,使用者設定優先於系統範圍設定。這對於別名也有效。使用者定義的別名優先於系統層級定義的別名。預設情況下,在 Ubuntu 上,alias ll='ls -alF'
在使用者.bashrc
檔案中定義,從而覆蓋您可能在其他地方設定的任何別名。