Local apropriado para colocar o prompt do shell (PS1) quando usar sh / bash / zsh juntos

0

Estou usando dash (sh) ou bash ou zsh. Se possível, prefiro colocar em comum.

Eu quero colocar as configurações adequadas do PS1 quando eu interagir com o shell, portanto, essa situação deve ser considerada

  1. login (mostra PS1)
  2. su
  3. sudo
  4. script (não mostra PS1)

Eu coloquei o PS1 no .bashrc, mas nem sempre funciona.

    
por Daniel YC Lin 18.01.2013 / 03:32

3 respostas

4

Cada shell tem suas próprias seqüências de escape para PS1 , então você precisa configurá-lo separadamente para cada shell. Além disso, PS1 só faz sentido para shells interativos, não é usado por outros programas. Então, coloque PS1 no arquivo de inicialização interativo do seu shell:

  • ~/.bashrc para bash
  • ~/.kshrc para ksh
  • ~/.zshrc para zsh

O Bash tem um capricho: ele não carrega .bashrc em um shell de login, ele carrega apenas ~/.bash_profile ou está faltando ~/.profile . Para corrigir isso, coloque as seguintes linhas no seu ~/.bash_profile :

if [ -e ~/.profile ]; then . ~/.profile; fi
case $- in *i*) . ~/.bashrc;; esac

Para obter mais informações sobre os arquivos de configuração do shell, consulte Existe um equivalente ".bashrc" arquivo lido por todos os shells? .

    
por 22.01.2013 / 01:30
0

Se você quiser o mesmo prompt para todos os shells e usuários, coloque-o no arquivo /etc/profile . Ele é originado por todos os shells e é o local padrão para definir o PS1.

    
por 18.01.2013 / 04:34
0

Uma coisa que você pode fazer é usar o comumente chamado vars para definir as fugas de terminal específicas para cada interpretação de shell em seu próprio script de origem, e então reunir tudo no final em um único prompt:

~/.zshrc

    esc1='SPECIFIC TO ZSH'
    esc2='SPECIFIC TO ZSH'
    . ~/.common_prompt

~/.bashrc

    esc1='SPECIFIC TO BASH'
    esc2='SPECIFIC TO BASH'
    . ~/.common_prompt

~/.dashrc

    esc1='SPECIFIC TO DASH'
    esc2='SPECIFIC TO DASH'
    . ~/.common_prompt

~/.common_prompt

     esc3='COMMONLY INTERPRETED ESCAPE SEQUENCE'
     PROMPT_COMMAND='eval PS1=\"printf %b "$esc1" "$esc2" "$esc3"\"'

E se um shell provavelmente fizer mais com o prompt do que outro, apenas o arquivo .dot sourcing .common_prompt não precisará ser o fim. Então, se zsh vai fazer mais processamento do que dash, , por exemplo - porque será - você simplesmente tira isso de lá:

~/.zshrc

    esc1='SPECIFIC TO ZSH'
    esc2='SPECIFIC TO ZSH'
    . ~/.common_prompt
    _more_processing "${PROMPT_COMMAND}"
    
por 09.04.2014 / 03:00