Contenu | Rechercher | Menus

Annonce

Si vous avez des soucis pour rester connecté, déconnectez-vous puis reconnectez-vous depuis ce lien en cochant la case
Me connecter automatiquement lors de mes prochaines visites.

À propos de l'équipe du forum.

#1 Le 28/05/2012, à 17:31

Saveman

Prompt selon privilèges

Bonjour à tous,

Je débute un peu niveau bash rc, et il y a un truc qui me tient à coeur depuis pas mal de temps : c'est tout simple en fait. J'aimerais que mon prompt soit sous la forme :

save@savework:~$

root@savework:/#

Donc avec la couleur de l'user qui change en fonction de son rang.
Merci pour l'aide !


OS : Ubuntu 12.04 64bits                                                                                                                                         PONIES WILL DOMINATE
CG : ATI Radeon Mobility HD 4250
CPU : AMD 2.1 GHz Dualcore
RAM : 4GO DDR3

Hors ligne

#2 Le 28/05/2012, à 18:36

demonipuch

Re : Prompt selon privilèges

Bonjour

Saveman a écrit :

save@savework:~$

Dans le fichier .bashrc de votre utilisateur :

PS1='${debian_chroot:+($debian_chroot)}\[\033[1;32m\]\u\[\033[0;m\]@\[\033[1;34m\]\h\[\033[0;m\]:\w \$ '

Dans le .bashrc de root :

Saveman a écrit :

root@saveworkhmm#

PS1='${debian_chroot:+($debian_chroot)}\[\033[1;31m\]\u\[\033[0;m\]@\[\033[1;34m\]\h\[\033[0;m\]:\w \$ '

Hors ligne

#3 Le 28/05/2012, à 18:41

Bousky

Re : Prompt selon privilèges

# Change le titre de la fenêtre (user@host: pwd)
PS1="\[\e]0;\u@\h: \w\a\]"
# Choix de la couleur de l'utilisateur
#       uid = 0    (root)                -> rouge
#       uid < 1000 (utilisateur système) -> orange
#       uid ≥ 1000 (utilisateur humain)  -> vert
PS1="$PS1"'\[\e[0;$(
        if   [ `id -u` -eq 0    ] ; then
                echo 31
        elif [ `id -u` -ge 1000 ] ; then
                echo 32
        else
                echo 33
        fi)m\]'
# Fin du prompt
PS1="$PS1\u\[\e[0m\]@\[\e[36m\]\h\[\e[0m\]:\w\\$ "

Sur mon PC, j'ai un fichier /etc/mon_prompt :

function mon_prompt {
PS1=...
}

J'ai commenté tout ce qui se rapporte au prompt dans les différents bashrc et j'ai mis à la fin de /etc/bash.bashrc :

. /etc/mon_prompt
mon_prompt

@demonipuch : selon comment on devient root (« su » vs. « su - », « sudo -i » vs. « sudo -s »), le bashrc n'est pas toujours lu…




PS : mon prompt en en réalité défini comme ça :

function bsk_prompt {
    case "$1" in
        1|2|3) ;;
        *) return 1 ;;
    esac

    # définition des couleurs
    local usr_root="\[\e[1;31m\]"  # utilisateur root (uid = 0)
    local usr_sys="\[\e[1;33m\]"   # utilisateurs système (uid < 1000)
    local usr_std="\[\e[1;32m\]"   # utilisateurs standards (uid >= 1000)
    local host="\[\e[1;35m\]"      # hostname
    local pwd="\[\e[1;36m\]"       # répertoire
    local pwd_clear="\[\e[1;34m\]" # répertoire (meilleure visibilité sur fond clair)
    local prompt="\[\e[31m\]"      # PS2 et fin de PS1 multi-ligne
    local null="\[\e[0m\]"         # réinitialisation des attributs graphiques
    local return="\E[1;31m⏎\e[0m"  # retour à la ligne avant le prompt

    local bw
    case "$2" in
        clear) pwd="$pwd_clear" ;;
        bw) bw="1" ;;
        "") ;;
        *) return 1 ;;
    esac
    
    [ -x /usr/bin/tput ] && tput setaf 1 >&/dev/null || bw=1
    if [ "$bw" ] ; then
        usr_root=
        usr_sys=
        usr_std=
        host=
        pwd=
        prompt=
        null=
        return="⏎"
    fi

    # retour à la ligne si la dernière commande ne l'a pas fait
    PROMPT_COMMAND='echo -en "\E[6n";read -sdR PRMPTCURPOS;[ ${PRMPTCURPOS#*;} -eq 1 ]||echo -e "'$return'";unset PRMPTCURPOS'
    # rectangle de couleur en fonction de la valeur d'erreur de la dernière commande
    if [ "$bw" ] ; then
        PS1=
    else
        PS1='\[\e[0;$(
            case $? in
                0  |130|147|148) echo "42" ;;
                137|143        ) echo "44" ;;
                *              )
                    if [ $? -ge 126 ] ; then
                                 echo "41"
                    else
                                 echo "43"
                    fi
            esac
        )m\] \[\e[0m\] '
    fi
    # ligne du dossier pour un prompt à trois lignes
    case "$1" in
        1|2) ;;
        3) PS1="${PS1}${pwd}\w${null}:\n${prompt}|${null} " ;;
    esac
    # choix de la couleur de l'utilisateur
    if [ `id -u` -eq 0 ] ; then
        PS1="${PS1}${usr_root}"
    elif [ `id -u` -lt 1000 ] ; then
        PS1="${PS1}${usr_sys}"
    else
        PS1="${PS1}${usr_std}"
    fi
    # user@host
    PS1="${PS1}\u${null}@${host}\h${null}"
    # dossier pour un prompt à une ou deux lignes
    case "$1" in
        1|2) PS1="${PS1}:${pwd}\w${null}\$" ;;
        3)   PS1="${PS1}\$";;
    esac
    case "$1" in
        1)   PS1="${PS1} " ;;
        2|3) PS1="${PS1}\n${prompt}|${null} " ;;
    esac

    # PS2
    case "$1" in
        1)   PS2="${prompt}>${null} " ;;
        2|3) PS2="${prompt}|${null} " ;;
    esac
    
    # If this is an xterm set the title to user@host:dir
    case "$TERM" in
    xterm*|rxvt*)
            PS1="\[\e]0;${debian_chroot:+($debian_chroot)}\u@\h: \w\a\]$PS1" ;;
    *)
    esac
}

Dernière modification par Bousky (Le 28/05/2012, à 18:52)


Linux qui plante complètement ? Plus rien ne répond ? On peut toujours le redémarrer proprement :
Alt + SysRq + REISUB (Retourne En Islande Sur Un Bateau !)

Hors ligne

#4 Le 28/05/2012, à 20:58

Saveman

Re : Prompt selon privilèges

Hey hey, voilà mon rendu final big_smile
Bureau

Ce que j'ai rajouté dans mon /etc/bash.bashrc :

PS1="$PS1"'\[\e[1;$(
        if   [ `id -u` -eq 0    ] ; then
                echo "31"
        elif [ `id -u` -ge 1000 ] ; then
                echo "32"
        else
                echo "33"
        fi)m\]'

PS1="$PS1\u@\h\[\e[1;34m\] \w \$ \[\e[0m\]"

(Ouais, ça fait linuxmint pour ceux qui connaissent, mais c'est ce que je recherchais !)

PS : Par contre, les couleurs du root ne marchent qu'avec sudo -s, et pas sudo -i, mais de toute façon, j'utilisait que le premier. A savoir !


Merci à vous deux smile

Dernière modification par Saveman (Le 28/05/2012, à 21:01)


OS : Ubuntu 12.04 64bits                                                                                                                                         PONIES WILL DOMINATE
CG : ATI Radeon Mobility HD 4250
CPU : AMD 2.1 GHz Dualcore
RAM : 4GO DDR3

Hors ligne

#5 Le 28/05/2012, à 21:22

Bousky

Re : Prompt selon privilèges

Sympa ton fond d'écran tongue
Ponies gona pwn!

Dernière modification par Bousky (Le 28/05/2012, à 21:23)


Linux qui plante complètement ? Plus rien ne répond ? On peut toujours le redémarrer proprement :
Alt + SysRq + REISUB (Retourne En Islande Sur Un Bateau !)

Hors ligne