su에서 터미널에 루트 프롬프트를 표시하는 방법

su에서 터미널에 루트 프롬프트를 표시하는 방법

(일반) 사용자로 로그인했지만 su : 비밀번호에 들어가면 일반 프롬프트에 원래 표시되어야 할 내용 대신에 이 내용이 표시됩니다. 이 문제를 어떻게 해결할 수 있나요?

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

나는 시작된 용어에 따라 프롬프트를 변경하기 위해 이 사례 설명을 사용하고 있습니다.

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대상 컨텍스트에서 대상 사용자를 호출하게 됩니다. 귀하의 경우에는 rootroot 라는 기본 사용자입니다 .bashrc.

이를 재정의하려면 수동으로 수행해야 합니다. 예를 들어 사용자 이름이 이면 userxbw명령 su프롬프트 후 실행 시 source ~userxbw/.bashrc개인 파일을 가져옵니다 .bashrc. 그러나 슈퍼유저로 실행하면 .bashrc의 명령이 위험할 수 있으므로 이는 루트로 실행할 때 위험한 방법입니다.

관련 정보