Bash: Como fazer alterações no prompt de comando permanente até que eu queira alterar o prompt novamente?

0

Eu gostaria de ter dois comandos - o primeiro a abreviar o prompt para $␣ ou #␣ . Isso deve ser permanente no shell atual, até eu emitir o comando long_prompt para redefinir o prompt para a versão padrão.

Este é o script de comando short_prompt :

if [ $(id -u) = 0 ]; then
   PS1='\[3[01;34m\]#\[3[00m\] '
else
   PS1='\[3[01;34m\]\$\[3[00m\] '
fi

(Como você vê, eu honro os diferentes prompts de shells de administração e shells de usuários)
Quando eu fonte este script com o seguinte:

$ . short_prompt

tudo funciona como esperado, mas para isso eu tenho que estar no diretório onde short_prompt reside ou dá o nome do caminho inteiro, assim:

$ . /data/system/bin/short_prompt

Não consigo descobrir como tornar este comando acessível de qualquer lugar (por exemplo, criando um link simples para um dos diretórios de caminho, por exemplo, /usr/local/bin ) e digite

$ short_prompt

ou

$ long_prompt

Eu tentei adicionar export na frente das duas linhas PS1='...' , mas isso também não funcionou.

    
por wolfy 07.01.2018 / 01:18

2 respostas

0

A única maneira de afetar o PS1 do shell em execução é a origem do código.

Existem muitas maneiras de resolver isso.

  1. Coloque um script em / home / user / bin

    Nomeie um script short_prompt para torná-lo executável e coloque-o em /home/user/bin .

    #!/bin/bash
    . /data/system/bin/short_prompt
    

    Se você fizer isso, a execução é simples:

    $ short_prompt

  2. Crie um alias

    $ alias short_prompt='. /data/system/bin/short_prompt'
    

    Executar como:

    $ short_prompt
    
  3. Use ~/.bashrc :

    Coloque o código dentro de '~ / .bashrc' como uma função:

    short_prompt(){
        PS1='\[3[01;34m\]\$\[3[00m\] '
    }
    

    Ligue para:

     $ short_prompt
    
por 07.01.2018 / 02:01
0

Coloque os scripts em um diretório no seu PATH , o source do Bash o usa para procurar o script na origem. Isso pode ser alterado com shopt sourcepath , mas está ativado por padrão.

Outra opção é criar um alias ou uma função para obter o script do caminho em que ele vive ou até mesmo colocar toda a atribuição do prompt na função. Isso também teria a vantagem de você não precisar usar explicitamente . ou source para chamar o script.

Como um aparte, \$ expande para # se você for root, então não há necessidade de definir um caminho separado para o root apenas para isso.

O que export faz com as atribuições é tornar a variável de ambiente visível para quaisquer shells adicionais que você possa iniciar no shell atual. Embora com PS1 exista o problema de que os shells não interativos irão apagá-lo, então ele é geralmente redefinido em .bashrc .

    
por 07.01.2018 / 01:59