Mientras busco en Google cómo personalizar mi indicador de shell a través de la variable PS1, veo tablas de caracteres especiales que se pueden usar. En particular:
\! the history number of this command
\# the command number of this command
Parece que el "número de historial" se usa más comúnmente, y sé cómo usar comandos como !523
rehacer comandos del historial. Pero no puedo entender si el "número de comando" tiene una funcionalidad similar. Intenté poner \#
mi variable PS1, y parece que muestra el número de comandos ingresados en una sesión particular (a diferencia \!
, que persiste después de cerrar sesión / salir).
¿Alguien sabe cómo usar el "número de comando" de una manera conveniente o significativa?
bash
command-line
command-history
Lagrangiana
fuente
fuente
Respuestas:
El número de comando de Bash es solo para visualización.
Primero, algunos antecedentes de
bashref
:Al bucear a través de la fuente,
parse.y
vemos que se'\#'
resuelve en la variable estática globalcurrent_command_number
:que solo tiene otro uso: en
eval.c
, se incrementa al ejecutar un comando:Todo lo que se mantiene es un número, no el comando real o incluso el número de historial equivalente. Entonces, al ejecutar cada comando, bash olvida qué comando está asociado con qué número de comando, haciendo que el número de comando sea inutilizable para cualquier otra cosa que no sea la referencia de visualización y desplazamiento.
fuente
Por lo que yo puedo decir (y esto parece confirmado por su investigación), no hay manera de referirse a ese número mágico de forma interactiva o no a través de
fc
o!n
accesos directos. Esos ciertamente parecen referirse solo a la posición absoluta en la lista del historial, no a la posición relativa desde que comenzó este shell específico (que es lo que se\#
refiere, como usted señaló correctamente).La única forma que encontré para hacer esto más agradable aquí es establecer lo siguiente:
De esa manera:
1000
, lo que facilita identificar dónde estoy en una sesiónBásicamente, convirtió mi prompt modificado (
PS1="\\!$ "
) de:a:
... lo que lo hace un poco más limpio al inicio. Pero esa probablemente no sea la respuesta que estabas buscando. :)
(Por cierto, también busqué en zsh una solución, y parece que simplemente no tiene el equivalente de
\#
, por lo que tampoco ayuda en absoluto).fuente