如何让终端在 su 中显示 root 提示符

如何让终端在 su 中显示 root 提示符

我已登录到(普通)用户,但是当我进入 su : 密码时,我的正常提示会向我显示这一点,而不是它应该显示的内容。我该如何解决这个问题?

ターミナル 10:15 AM (~) $ su
Password: 
\033[1;31mターミナル \@ \033[1;33m(\033[1;34m\W\033[1;33m) \033[1;31m$ \033[0m

我正在使用此 case 语句根据启动的术语来更改提示。

which_term(){
    term=$(ps -p $(ps -p $$ -o ppid=) -o args=);
    found=0;
    case $term in
        *terminator*)
            found=1
            export PS1="\@ \[\e[34;43m\]\w\[\e[m\]\\$ "
             if [ -f /usr/bin/screenfetch ]; then screenfetch; fi
            ;;
        *terminology*)
            found=1
            #  echo "terminology "  
            export PS1=" \[\e[31m\]%\[\e[35m\]\u\[\e[m\]\[\e[36m\]@\[\e[m\]\[\e[35m\]\h\[\e[m\] \[\e[32m\]\T\[\e[m\] \[\e[36m\]\w\[\e[m\]\[\e[31m\] >>$\[\e[m\]\`nonzero_return\` "  

            if [ -f /usr/bin/screenfetch ]; then screenfetch; fi
            ;;
        urxvt*)
            found=1
           # echo "rxvt " 
            #PS1='%\u@\h \@ \W >>\$' 
            export PS1="\[\e[33m\]%\[\e[m\]\[\e[31m\]\u\[\e[m\]\[\e[33m\]@\[\e[m\]\[\e[31m\]\h\[\e[m\]:\[\e[36m\]\@\[\e[m\]\[\e[33m\]\w\[\e[m\]\[\e[31m\] >>\[\e[m\]\[\e[33m\]\\$\[\e[m\] "
            #export PS1='\033[1;31mターミナル \033[1;33m(\033[1;34m\W\033[1;33m)\@\033[1;31m\$ \033[0m'
            ;;
        Eterm*)
            found=1
            export PS1="\d \@ Scooby-Doo\w\\$ "

           # if [ -f /usr/bin/screenfetch ]; then screenfetch -t; fi

            ;;
        aterm*)
            found=1
             export PS1="\d \@ Aterm\w\\$ "
             ;;
        roxterm*)
            found=1
             export PS1='% \@ \u@\h \W>>\$'
            ;;
        mrxvt*)
            found=1
            export PS1="\[\e[31m\]\T\[\e[m\]\[\e[33m\]@\[\e[m\]\[\e[31m\]\u\[\e[m\]\[\e[34m\]\h\[\e[m\]\[\e[35;42m\]\W\[\e[m\] "

            ;;

        ## Try and guess for any others
        *)
        export PS1='\033[1;31mターミナル \@ \033[1;33m(\033[1;34m\W\033[1;33m) \033[1;31m\$ \033[0m'

     if [ -f /usr/bin/screenfetch ]; then screenfetch -t; fi
            ;;
    esac
    ## If none of the version arguments worked, try and get the 
    ## package version
    [ $found -eq 0 ] && echo "$term " $(dpkg -l $term | awk '/^ii/{print $3}')    
}    

which_term

答案1

我相信正在发生的事情是您的which_term()函数正在您的个人登录上下文中执行。在这种情况下,所有即时更改都将起作用。当您使用su(替换用户)命令时,您将切换到不同的用户上下文。在这种情况下,您将.bashrc在目标上下文中调用目标用户的在您的情况下,它是默认用户,root调用 root 的.bashrc.

如果您想覆盖它,您应该手动执行。例如,如果您的用户名是userxbw,那么在su命令给出提示后,执行source ~userxbw/.bashrc将获取您的个人.bashrc文件。但是,当以 root 身份运行时,这是一种危险的做法,因为 .bashrc 中的命令可能在以超级用户身份运行时很危险。

相关内容