O título do terminal mostra sudo, mas eu quero o comando que está sudo'ed

1

Então eu me tornei bastante adepto das tarefas aqui, desde editar todas as postagens até responder perguntas, então acho que é hora de fazer uma pergunta:

Informações técnicas

Distribuição: Gentoo
Ambiente Desktop: KDE
Emulador de terminal: Kterm

Problema

Qualquer um que use o Gentoo por um longo tempo se acostuma com um terminal e um código fonte flutuando. Como tal, passei a depender do terminal, mesmo no KDE, com comandos como:

  • kdesudo kate /etc/portage/make.conf
  • sudo emerge -uDav world

Esses comandos funcionam como esperado, meu problema aqui é que o título do kterm mostra username:sudo Eu quero que ele mostre username: sudo elevated, ou username: elavated command .

Eu uso o seguinte perfil:

# /etc/profile: login shell setup
#
# That this file is used by any Bourne-shell derivative to setup the
# environment for login shells.
#

# Load environment settings from profile.env, which is created by
# env-update from the files in /etc/env.d
if [ -e /etc/profile.env ] ; then
    . /etc/profile.env
fi

# You should override these in your ~/.bashrc (or equivalent) for per-user
# settings.  For system defaults, you can add a new file in /etc/profile.d/.
export EDITOR=${EDITOR:-/bin/nano}
export PAGER=${PAGER:-/usr/bin/less}

# 077 would be more secure, but 022 is generally quite realistic
umask 022

# Set up PATH depending on whether we're root or a normal user.
# There's no real reason to exclude sbin paths from the normal user,
# but it can make tab-completion easier when they aren't in the
# user's PATH to pollute the executable namespace.
#
# It is intentional in the following line to use || instead of -o.
# This way the evaluation can be short-circuited and calling whoami is
# avoided.
if [ "$EUID" = "0" ] || [ "$USER" = "root" ] ; then
    PATH="/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:${ROOTPATH}"
else
    PATH="/usr/local/bin:/usr/bin:/bin:${PATH}"
fi
export PATH
unset ROOTPATH

if [ -n "${BASH_VERSION}" ] ; then
    # Newer bash ebuilds include /etc/bash/bashrc which will setup PS1
    # including color.  We leave out color here because not all
    # terminals support it.
    if [ -f /etc/bash/bashrc ] ; then
        # Bash login shells run only /etc/profile
        # Bash non-login shells run only /etc/bash/bashrc
        # Since we want to run /etc/bash/bashrc regardless, we source it 
        # from here.  It is unfortunate that there is no way to do 
        # this *after* the user's .bash_profile runs (without putting 
        # it in the user's dot-files), but it shouldn't make any 
        # difference.
        . /etc/bash/bashrc
    else
        PS1='\u@\h \w \$ '
    fi
else
    # Setup a bland default prompt.  Since this prompt should be useable
    # on color and non-color terminals, as well as shells that don't
    # understand sequences such as \h, don't put anything special in it.
    PS1="${USER:-$(whoami 2>/dev/null)}@$(uname -n 2>/dev/null) \$ "
fi

for sh in /etc/profile.d/*.sh ; do
    [ -r "$sh" ] && . "$sh"
done
unset sh

Vou inserir meu arquivo etc/bashrc/bashrc aqui quando eu voltar para casa ...

Deixei os comentários para dar aos novos usuários uma tentativa de resposta. Como tal, a resposta mais completa que funciona será atribuída pontos, mesmo que o seu novo aqui. Eu quero uma resposta formatada corretamente com referências e links

Atualizar

    
por eyoung100 12.12.2014 / 04:18

1 resposta

0

Não tenho certeza sobre kterm , mas provavelmente é xterm compatível com escape - a maioria é. Se assim for, então você vai querer colocar algo em seu prompt que define o título da janela :

  • 3.1 sequências de escape xterm

  • Os títulos de janelas e ícones podem ser alterados em um xterm em execução usando seqüências de escape XTerm. As sequências seguintes são úteis a este respeito:

    • ESC]0;stringBEL - Defina o nome do ícone e o título da janela como string
    • ESC]1;stringBEL - define o nome do ícone para string
    • ESC]2;stringBEL - Define o título da janela como string
  • ... onde ESC é o caractere de escape ( 3 ) e BEL é o caractere da campainha ( bash7 ).

Você pode colocá-los no seu prompt entre o escape não imprimível - se você estiver usando $PROMPT_COMMAND . Nesse shell você pode usar:

PS1="\[$(printf '3]0;"${USER}@${BASH_COMMAND}"
PS1="\[$(printf '3]0;"${USER}@${BASH_COMMAND}"%pre%7')\]"
7')\]"

Ou você pode colocar algo assim em sua variável de ambiente konsole .

MAS ...

Aparentemente ESC]33;Window nameBEL variou por versão se ele permitiria definir o nome da janela caminho da seqüência de escape. Em algum momento durante seu ciclo da versão 3, ele parou de interpretar a sequência xterm e honrou as sequências konsole apenas para alterar os títulos das guias.

Desde versão 4.9 , no entanto, ESC]30;Tab NameBEL deve pelo menos honre a sequência estranha xterm e, se você configurá-la como vazia na caixa de diálogo de configurações, o nome da janela será clonado automaticamente a partir da guia atualmente ativa.

Não estou certo se você pode usar os mais comuns %code% escapes para definir o título da janela ou não. Se as informações oferecidas aqui não forem suficientes para chegar a uma solução satisfatória, no entanto, suspeito que você encontrará algumas informações úteis clicando nos links anexados às alterações relevantes registradas para a versão 4.9 no changelog aqui .

    
por 12.12.2014 / 07:36