Onde devo salvar códigos de cores para a linha de comando / terminal do PS1? [fechadas]

5

Esta questão é sobre as melhores práticas. Eu sei fazer login em shell seguro ou alternar usuários su e su -l têm efeitos diferentes. Além disso, no caso de você cometer um erro de digitação na configuração, você ainda deseja ser capaz de fazer o login. Onde estão / estão os / alguns locais ideais para armazenar definições de cores? No momento eu os tenho em .bash_profile . Há algum problema em armazená-los em .bashrc ?

Locais de configuração:

De acordo com o ArchWiki

  • /etc/profile Configurações do aplicativo de origens em /etc/profile.d/*.sh e /etc/bash.bashrc .
  • ~/.bash_profile por usuário, após /etc/profile .
  • ~/.bash_login (se .bash_profile não foi encontrado)
  • ~/.profile (se .bash_profile não foi encontrado)
  • /etc/skel/.bash_profile também origina ~/.bashrc .
  • ~/.bash_logout
  • /etc/bash.bashrc Depende do sinalizador de compilação -DSYS_BASHRC="/etc/bash.bashrc" . Fontes /usr/share/bash-completion/bash_completion
  • ~/.bashrc por usuário, após /etc/bash.bashrc .

Vamos salvar eu tenho duas definições de cores, uma para o prompt de comando e outra para o comando ls .

set_prompt () {
    Last_Command=$? # Must come first!
    Blue='\[\e[01;34m\]'
    White='\[\e[01;37m\]'
    Redbold='\[\e[01;31m\]'
    Greenbold='\[\e[01;32m\]'
    Greenlight='\[\e[00;32m\]'
    Blueintense='\[3[00;96m\]'
    Purplelight='\[\e[00;35m\]'
    Yellowbold='\[\e[01;33m\]'
    Graydark='\[\e[01;90m\]'
    Reset='\[\e[00m\]'
    FancyX='247'
    Checkmark='243'

    PS1="${Graydark}\t "
    if [[ $Last_Command == 0 ]]; then
        PS1+="$Greenlight$Checkmark "
    else
        PS1+="$Redbold$FancyX "
    fi
    if [[ $EUID == 0 ]]; then
        PS1+="\u@$Redbold\h "
    else
        PS1+="$Greenlight\u$White@$Redbold\h "
    fi
    PS1+="$Graydark\W $Redbold\\$$Reset "
}
PROMPT_COMMAND='set_prompt'

set_ls () {
    Default='0;0'
    White='97'
    Yellowbold='01;33'
    Greenlight='00;32'
    Purplelight='00;35'
    Purplebold='01;35'
    Whitelight='00;37'
    Yellowlight='00;33'
    Graydark='00;90'
    # Highlight
    Highlightpurpledark='45'
    Highlightgraydark='100'
    LS_COLORS="fi=$Greenlight:di=$White;$Highlightgraydark:*.tex=$Purplebold"
    export LS_COLORS
}
set_ls
    
por Jonathan Komar 25.05.2016 / 09:20

4 respostas

1

Eu colocaria variáveis de ambiente em .bash_login ou .bash_profile, já que elas são (quando exportadas) herdadas para subshells e não precisam ser redefinidas para cada invocação de shell. Não que redefini-los custaria praticamente qualquer coisa, mas no caso eu quero definir um envvar para outra coisa pela duração de um subshell. Isso é difícil de fazer se o .bashrc substituir a configuração.

Para todo o resto (incluindo funções), você quer colocá-los em .bashrc, já que .bash_login e amigos não serão lidos por subshells. .bashrc geralmente será, através de um dos scripts de perfil / login.

É claro que seu uso do PS1 é um pouco diferente, já que você quer uma função que o altere.

(Bash é um pouco engraçado com os arquivos de inicialização. Os shells de login lêem bash_profile e friends, mas não bashrc. Shells não-login funcionam exatamente o oposto. Então não há arquivos que serão lidos por todas as invocações de shell, a menos que bashrc seja originado pelos scripts de perfil. link )

A escolha entre .profile, .bash_profile e .bash_login é completamente sua, e escolher entre configuração global e configuração por usuário depende, obviamente, de se você deseja alterar o comportamento de todos os usuários ou apenas um.

Quanto aos erros de digitação, mantenha um shell aberto e teste os scripts após alterá-los. :) Não que um simples erro de digitação importe, na pior das hipóteses ele irá parar de ler o script de inicialização e / ou atrapalhar o resto das configurações. A menos que você tenha uma "saída" no seu .bashrc por algum motivo.

    
por 25.05.2016 / 13:24
1

Eu coloco o código PS1 em bashrc o tempo todo.

Meu código é o seguinte:

export PS1="\[\e[01;37m\][\[\e[0m\]\[\e[01;32m\]\u\[\e[0m\]\[\e[00;37m\]@\[\e[0m\]\[\e[01;34m\]\h\[\e[0m\]\[\e[00;37m\] \[\e[0m\]\[\e[00;37m\]\t\[\e[0m\]\[\e[01;37m\] \W \e[1;37m(\e[1;32m|\e[1;33m|\e[1;31m|\e[1;37m]\$ \[\e[0m\]"

Eu uso um PS1 diferente para o nome de usuário root (/root/.bashrc) - red e para servidores de produção vs locais - formato diferente.

Veja este reddit para códigos legais. O truque da nova linha é realmente útil!

    
por 25.05.2016 / 09:36
1

Como a questão é essencialmente pedir opiniões, você terá respostas diferentes. Uma boa prática de design, por exemplo, usa o menor número de lugares possível para fornecer um determinado recurso. Alguns colocam informações como essa na área do sistema para reduzir a quantidade de trabalho feita pelos usuários para personalizar seu ambiente de shell.

No meu ambiente, eu uso o banco de dados do terminal e elimino, sempre que possível, o tipo de listas codificadas de seqüências de escape sugeridas nesta questão. Por exemplo, no meu editor de diretório, eu uso nomes em vez de números (e não uso LS_COLORS ):

OsBSDstambémusamobancodedadosdoterminalemsua ls implementação , mas com menos configurabilidade para o recurso "cores ls". Embora seja mais configurável, no entanto, o GNU ls dá resultados que são questionáveis. Por exemplo

TERM=vt100 dircolors

mostra

setenv LS_COLORS 'rs=0:di=01;34:ln=01;36:mh=00:pi=40;33:so=01;35:do=01;35:bd=40;33;01:cd=40;33;01:or=40;31;01:su=37;41:sg=30;43:ca=30;41:tw=30;42:ow=34;42:st=37;44:ex=01;32:*.tar=01;31:*.tgz=01;31:*.arj=01;31:*.taz=01;31:*.lzh=01;31:*.lzma=01;31:*.tlz=01;31:*.txz=01;31:*.zip=01;31:*.z=01;31:*.Z=01;31:*.dz=01;31:*.gz=01;31:*.lz=01;31:*.xz=01;31:*.bz2=01;31:*.bz=01;31:*.tbz=01;31:*.tbz2=01;31:*.tz=01;31:*.deb=01;31:*.rpm=01;31:*.jar=01;31:*.war=01;31:*.ear=01;31:*.sar=01;31:*.rar=01;31:*.ace=01;31:*.zoo=01;31:*.cpio=01;31:*.7z=01;31:*.rz=01;31:*.jpg=01;35:*.jpeg=01;35:*.gif=01;35:*.bmp=01;35:*.pbm=01;35:*.pgm=01;35:*.ppm=01;35:*.tga=01;35:*.xbm=01;35:*.xpm=01;35:*.tif=01;35:*.tiff=01;35:*.png=01;35:*.svg=01;35:*.svgz=01;35:*.mng=01;35:*.pcx=01;35:*.mov=01;35:*.mpg=01;35:*.mpeg=01;35:*.m2v=01;35:*.mkv=01;35:*.webm=01;35:*.ogm=01;35:*.mp4=01;35:*.m4v=01;35:*.mp4v=01;35:*.vob=01;35:*.qt=01;35:*.nuv=01;35:*.wmv=01;35:*.asf=01;35:*.rm=01;35:*.rmvb=01;35:*.flc=01;35:*.avi=01;35:*.fli=01;35:*.flv=01;35:*.gl=01;35:*.dl=01;35:*.xcf=01;35:*.xwd=01;35:*.yuv=01;35:*.cgm=01;35:*.emf=01;35:*.axv=01;35:*.anx=01;35:*.ogv=01;35:*.ogx=01;35:*.aac=00;36:*.au=00;36:*.flac=00;36:*.mid=00;36:*.midi=00;36:*.mka=00;36:*.mp3=00;36:*.mpc=00;36:*.ogg=00;36:*.ra=00;36:*.wav=00;36:*.axa=00;36:*.oga=00;36:*.spx=00;36:*.xspf=00;36:'

qual (veja as perguntas frequentes Como obtenho cores com o VT100? ) não é uma melhoria.

Outros usam tput para obter as cores reais, permitindo alterar a personalização através de uma única variável de ambiente ( TERM ), em vez de distribuir as informações entre vários arquivos de configuração.

Se você colocar a personalização na área do sistema, há a desvantagem de manter sua personalização, pois as atualizações são aplicadas ao sistema. Além disso, alguns (como no Fedora) já estiveram lá (veja Features / 256 Color Terminals ) e coordenar suas alterações para uma ou mais máquinas pode estar envolvido.

    
por 25.05.2016 / 10:39
1

Eu gostaria de sugerir que você coloque todos os seus aliases e funções em um arquivo, normalmente ~/.bash_aliases .

Se ainda não estiver presente, você pode adicionar em seu .bashrc (ou onde quer que você precise) essas linhas:

# Alias definitions.
# You may want to put all your additions into a separate file like
# ~/.bash_aliases, instead of adding them here directly.
# See /usr/share/doc/bash-doc/examples in the bash-doc package.

if [ -f ~/.bash_aliases ]; then
    . ~/.bash_aliases
fi

Retirado de um Ubuntu .bashrc , é claro que você pode deixar de fora os comentários ...
No Ubuntu, por exemplo, isso é um padrão , mas o uso desse tipo de arquivo é mais antigo que o Ubuntu ...

Nota:
Será mais confortável configurar uma conta em uma nova máquina.

    
por 25.05.2016 / 13:40