下面是我当前在/etc/bash.bashrc
和中的 PS1 设置~/.bashrc
:
if [[ ${EUID} == 0 ]]; then
PS1='${debian_chroot:+($debian_chroot)}\[\033[01;31m\]\h\[\033[01;36m\] \W \$\[\033[00m\] '
else
PS1='${debian_chroot:+($debian_chroot)}\[\033[01;32m\]\u@\h\[\033[01;36m\] \w \$\[\033[00m\] '
fi
只对普通用户有效,对root用户无效,为什么?它总是回到我身边 PS1=\[\e]0;\u@\h: \w\a\]${debian_chroot:+($debian_chroot)}\u@\h:\w\$
答案1
由于后面的提示符su
不是/home/maxdm
,~
说明该su
命令可能将环境变量的值更改HOME
为 root 用户的主目录/root
。
这意味着 shell 以 root 身份启动的su
命令确实执行了/root/.bashrc
,而不是/home/maxdm/.bashrc
.所以你的自定义 PS1 设置没有被执行。
如果您不想.bashrc
默认拥有每用户文件,您可以删除该文件或将其移至其他名称。如果您想为系统上的所有现有用户执行此操作,则此行将执行此操作:
for userhome in $(cut -d : -f 6 /etc/passwd); do [ -f $userhome/.bashrc ] && mv $userhome/.bashrc $userhome/bashrc.disabled; done
要停止.bashrc
自动添加您稍后创建的新用户,只需删除或重命名新用户主目录模板中的文件即可/etc/skel
:
mv /etc/skel/.bashrc /etc/skel/bashrc.disabled
阻止用户进行定制的能力.bashrc
并不是一个常见的请求:通常用户的内容.bashrc
被认为是用户的业务,而不是系统管理员的业务。但如果您出于某种原因需要这样做,放置一个空文件并将.bashrc
其设置为不可变 ( chattr +i .bashrc
) 应该可以解决问题。
(请注意,这也会阻止userdel -r
删除用户的主目录,除非您首先撤消不变性。)