Pendant que Google cherche à personnaliser mon invite de shell via la variable PS1, je vois des tableaux de caractères spéciaux qui peuvent être utilisés. En particulier:
\! the history number of this command
\# the command number of this command
Le «numéro d'historique» semble être plus couramment utilisé, et je sais comment utiliser des commandes comme !523
pour refaire des commandes de l'historique. Mais je ne peux pas savoir si "numéro de commande" a des fonctionnalités similaires. J'ai essayé de mettre \#
ma variable PS1, et il semble afficher le nombre de commandes entrées dans une session particulière (contrairement à \!
ce qui persiste après déconnexion / sortie).
Quelqu'un sait comment utiliser le "numéro de commande" d'une manière pratique ou significative?
bash
command-line
command-history
Lagrangien
la source
la source
Réponses:
Le numéro de commande de Bash est uniquement à afficher.
Tout d'abord, quelques informations sur
bashref
:En plongeant à travers la source,
parse.y
nous voyons que se'\#'
résout la variable statique globalecurrent_command_number
:qui n'a qu'une seule autre utilisation: dans
eval.c
, il est incrémenté lors de l'exécution d'une commande:Tout ce qui est conservé est un nombre, pas la commande réelle ou même le numéro d'historique équivalent. Ainsi, lors de l'exécution de chaque commande, bash oublie quelle commande associée à quel numéro de commande, rendant le numéro de commande inutilisable pour autre chose que l'affichage et la référence de défilement.
la source
Pour autant que je peux dire (et cela semble confirmé par votre recherche), il n'y a aucun moyen de se référer à ce numéro de magie interactive ou non par
fc
ou!n
raccourcis. Celles-ci semblent certainement se référer uniquement à la position absolue dans la liste historique, pas à la position relative depuis le début de ce shell spécifique (ce qui est ce qui se\#
réfère, comme vous l'avez correctement souligné).La seule façon que j'ai trouvée pour rendre cela plus agréable ici est de définir ce qui suit:
De cette façon:
1000
, ce qui facilite l'identification de ma position dans une sessionFondamentalement, il a transformé mon invite modifiée (
PS1="\\!$ "
) de:à:
... ce qui le rend un peu plus propre au démarrage. Mais ce n'est probablement pas la réponse que vous cherchiez. :)
(Soit dit en passant, j'ai également examiné zsh pour une solution, et il semble qu'il n'a tout simplement pas l'équivalent de
\#
, donc cela n'aide pas du tout non plus.)la source