Truncar a parte do nome do host de PROMPT

0

Eu tenho algumas instâncias que fazem parte de um ambiente de nuvem. Seu nome é sufixado com um UUID, como:

<name-of-host>-411a7a0e-b409-46a0-bf8f-546ffc50ee2b

Eu não quero esconder isso, já que me ajuda a saber em qual máquina eu estou, então eu gostaria de ver apenas os primeiros 20 caracteres.

Meu prompt padrão é como:

PROMPT="[%n@%m %1~]%(#.#.$) "

Então, minha primeira tentativa foi:

PROMPT="[%n@%20>...>%m %1~]%(#.#.$) "

No entanto, isso não funciona, como mostra assim:

user@name-of-host...<command prompt is right here>

Então eu tentei assim:

PROMPT="[%n@%{%20>...>%m%} %1~]%(#.#.$) "

Ele exibe o prompt corretamente, mas quando eu tento algo como bck-i-search ( CTRL-R ), a parte dentro do %{...%} é sobrescrita.

Os documentos do ZSH explicam por que:

%{...%}
Include a string as a literal escape sequence.  The
  string within the braces should not change the cur-
  sor position.  Brace pairs can nest.

Existe alguma outra maneira de conseguir o que eu quero?

    
por Henrique Barcelos 02.08.2016 / 16:38

2 respostas

3

Você pode encerrar truncamentos - como em "truncar somente até aqui" - com %>> ou %<< :

PROMPT="[%n%20>...>%m%>> %1~]%(#.#.$) "

Aqui está a parte relevante do manual do ZSH :

The part of the prompt string to be truncated runs to the end of the string, or to the end of the next enclosing group of the '%(' construct, or to the next truncation encountered at the same grouping level (i.e. truncations inside a '%(' are separate), which ever comes first. In particular, a truncation with argument zero (e.g., '%<<') marks the end of the range of the string to be truncated while turning off truncation from there on. For example, the prompt '%10<...<%~%<<%# ' will print a truncated representation of the current directory, followed by a '%' or '#', followed by a space. Without the '%<<', those two characters would be included in the string to be truncated.

    
por 03.08.2016 / 00:27
1

Como o nome do host não muda de comando para comando, você pode simplesmente incluí-lo no PROMPT como uma string literal em vez de usar %m .

Isto é, algo como

short_hostname="$(hostname|sed -e 's/-.*//')"
PROMPT="[%n@${short_hostname} %1~]%(#.#.$) "
    
por 02.08.2016 / 18:56

Tags