我通过小道消息听说 /etc/profile 中的文件将在登录时由 bash 自动获取?
我尝试向 /etc/profile 写入一些简单的内容:
echo "echo 'foo'" > /etc/profile/foo.sh
但我得到了这个奇怪的错误:
bash: /etc/profile/foo.sh: Not a directory
有正确的方法吗?
答案1
/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 中的脚本有什么作用?