Enquanto pesquisava no Google como personalizar meu prompt de shell por meio da variável PS1, estou vendo tabelas de caracteres especiais que podem ser usados. Em particular:
\! the history number of this command
\# the command number of this command
O "número do histórico" parece ser mais comumente usado, e eu sei como usar comandos como !523
refazer comandos do histórico. Mas não consigo descobrir se o "número do comando" tem uma funcionalidade semelhante. Eu tentei colocar \#
minha variável PS1, e parece gerar o número de comandos digitados em uma sessão específica (ao contrário \!
, que persiste após o logout / exit).
Alguém sabe como usar o "número do comando" de uma maneira conveniente ou significativa?
bash
command-line
command-history
Lagrangiano
fonte
fonte
Respostas:
O número do comando do Bash é apenas para exibição.
Primeiro, alguns antecedentes de
bashref
:Mergulhando através da fonte,
parse.y
vemos que'\#'
resolve a variável estática globalcurrent_command_number
:que tem apenas outro uso: em
eval.c
, é incrementado ao executar um comando:Tudo o que é mantido é um número, não o comando real ou mesmo o número do histórico equivalente. Portanto, após a execução de cada comando, o bash esquece qual comando associado a qual número de comando, tornando o número do comando inutilizável para outra coisa que não seja referência de exibição e rolagem.
fonte
Tanto quanto eu posso dizer (e isso parece confirmado por sua pesquisa), não há como se referir a esse número mágico interativamente, ou não através de
fc
ou!n
atalhos. Esses certamente parecem se referir apenas à posição absoluta na lista do histórico, não à posição relativa desde que esse shell específico foi iniciado (o que é o que se\#
refere, como você apontou corretamente).A única maneira que encontrei para tornar isso mais agradável aqui é definir o seguinte:
Dessa maneira:
1000
, o que facilita a identificação de onde estou em uma sessãoBasicamente, ele virou meu prompt modificado (
PS1="\\!$ "
) de:para:
... o que o torna um pouco mais limpo no início. Mas essa provavelmente não é a resposta que você estava procurando. :)
(A propósito, eu também procurei no zsh por uma solução, e parece que ele simplesmente não tem o equivalente
\#
, então isso também não ajuda em nada.)fonte