Bash

如何將自動獲取的 shell 腳本寫入 /etc/profile

  • June 23, 2018

我通過小道消息聽說 /etc/profile 中的文件將在登錄時由 bash 自動獲取?

我嘗試在 /etc/profile 中寫一些簡單的東西:

echo "echo 'foo'" > /etc/profile/foo.sh

但我得到了這個奇怪的錯誤:

bash: /etc/profile/foo.sh: Not a directory

有正確的方法嗎?

/etc/profile是一個文件。因此嘗試創建時出現錯誤/etc/profile/foo.sh

/etc/profile.d是您正在考慮的目錄。放置在那裡的腳本在登錄時獲取。在您的範例中,您想要創建/etc/profile.d/foo.sh.

這背後的腳本邏輯以及它是如何被拉入的可以在下面看到。類似的程式碼在/etc/profile/etc/bashrc/etc/csh.cshrc/etc/csh.login

$ grep -A 8 ^for.*profile.d /etc/profile
for i in /etc/profile.d/*.sh /etc/profile.d/sh.local ; do
   if [ -r "$i" ]; then
       if [ "${-#*i}" != "$-" ]; then
           . "$i"
       else
           . "$i" >/dev/null
       fi
   fi
done
$

創建和呼叫此類腳本的範例:

# echo id >/etc/profile.d/foo.sh
# su - steve
Last login: Sat Jun 23 21:44:41 UTC 2018 on pts/0
uid=1000(steve) gid=1001(steve) groups=1001(steve),4(adm),39(video),1000(google-sudoers) context=unconfined_u:unconfined_r:unconfined_t:s0-s0:c0.c1023
$

/etc/profile.d 中的腳本做什麼?

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