Estou usando o Ubuntu e posso alterar manualmente a bash
cor do prompt do shell para verde usando
export PS1="\e[0;32m[\u@\h \W]\$ \e[m"
No entanto, quero que a cor do prompt do shell seja alterada automaticamente sempre que abrir um novo terminal ou guia. Estou ciente de que o termo tty básico tem 16 cores e não há problema em girar as cores se houver mais de 16 terminais abertos. A solução também funcionará quando eu conectar Putty
, tmux
ou screen
.
Minha idéia é escrever um script de shell e colocá-lo no .bashrc
qual detecta a nova sessão do terminal que o usuário abriu e incrementa um contador global de \e[0;31m[
para \e[0;47m[
. Como detectar o número de terminais abertos pelo usuário?
fonte
tty
. Eu acho que nós / outros nos concentramos demais nessa "questão" e esqueci que pode haver outras soluções para toda a "necessidade" :) Eu até brincaria com a implementação do seletor de cores aleatório. Se houver 256 cores, a seleção de cores iguais / semelhantes não deve acontecer muito. No entanto, a configuração manual de cores para determinados números de pontos dará uma melhor personalização.color="\e[38;5;"$(((RANDOM % 231 )+1))"m"
(apenas 231 para rejeitar a escala de cinza), no entanto muitas dessas cores eram apenas tons diferentes e algumas são escuras, então podem ser quase invisíveis e eu acho que ninguém vai usar isso na vida real ...Em uma situação de usuário único, se usarmos o exemplo de
xterm
, podemos simplesmente contar o número de pids dexterm
;xterm
cria um pid separado para cada janela.gnome-terminal
no entanto, executa um único pid, mas a boa notícia é que ele cria um processo filho para cada janela e / ou guia. podemos recuperar esses processos filhos pelo comando:No entanto, existem algumas complicações para lidar com:
Lendo sua pergunta, podemos assumir que, nesse caso , o usuário é realmente o proprietário da x-session . Geralmente, podemos simplesmente usar a
$USER
variável-, mas isso pode não corresponder ao usuário atualmente conectado$DISPLAY
.Em uma situação multiusuário, os pids pertencentes ao (ou qual) aplicativo de terminal não pertencem necessariamente ao atual
$DISPLAY
. Precisamos separar apenas os pids e pids relevantes.No Unity (15.10 ou inferior), se um segundo usuário efetuar login, um processo adicional será iniciado (
gnome-pty-helper
), que aparecerá como um processo filhognome-terminal
, mas o processo (obviamente) não terá janela ou guia. No Mate , o processo existe de qualquer maneira.Em resumo
Para contar o número de guias e / ou janelas de um aplicativo de terminal, precisamos:
$DISPLAY
(x-session)$DISPLAY
gnome-pty-helper
é executado, para corrigir o número.No entanto, isso pode muito bem ser guiado por script, para encontrar com segurança o número de janelas e / ou guias atualmente abertas.
O script
No script abaixo, o aplicativo de terminal de destino é usado como argumento . O script funciona em muitos terminais em que eu testei. Uma exceção está
Tilda
neste momento.Um exemplo
gnome-terminal
janelas, um (aquele na imagem) com trêsgnome-terminal
janelas e duasxterm
janelas.O comando:
saídas:
enquanto
saídas:
O script
Usar
Copie o script em um arquivo vazio, salve-o como
get_terms.sh
, torne-o executável e execute-o pelo comando:fonte
gnome-pty-helper
execução, mesmo quando há apenas um usuário conectado (logo após a reinicialização) e quando abro qualquer quantidade de terminais, ele é executado em segundo lugar, o mesmo ajudante. Seu novo script parece estar funcionando para o mate-terminal (não foi possível causar essa coisa zero), mas com o xterm, quando eu apenas abri 1, ele mostra0
e começa a mostrar um bom número somente após o segundo e com o gnome-terminal sempre mostra um número a menos (saída0
quando apenas um é aberto).Uma
awk
maneira:Explicação:
No comando acima de 1 liner,
awk
é usado para encontrar a contagem de terminais. Dentro doawk
programa, está apenas verificando o número de linhas retornadas por quem comanda - 1.fonte
who | awk 'END{print NR - 1}'
, já que o que você quer é o número de linhas - 1.A maneira simples também pode ser executada
System Monitor
(se for iniciado no Terminal, você deve escrevergnome-system-monitor
) e, na guia "Processos", organize os processos em execução por Nome e depois conte o número de ocorrênciasBash
na lista (eles estarão todos juntos, se você organizar por nome, por isso é fácil contar).Observe que você deve procurar
Bash
e nãoGnome Terminal
se deseja ver o número de terminais abertos por usuário. Depois de aberto, um terminalGnome Terminal
também aparecerá na lista de processos, mas permanecerá apenas um, mesmo que mais terminais sejam abertos. O botão "Visualizar"System Monitor
permite definir quais processos visualizar, por exemplo. Todos os processos / processos do usuário / ativo ...fonte