J'ai rencontré des séquences bash telles que \033[999D
et \033[2K\r
qui sont utilisées pour effectuer des manipulations sur une impression sur un terminal. Mais que signifient ces séquences? Où puis-je trouver une liste / un résumé sur le Web pour m'aider à trouver la signification de ces séquences?
19
Réponses:
Voir ce lien http://www.termsys.demon.co.uk/vtansi.htm . Comme le dit Anthon,
\033
est le code octal de style C pour un personnage d'échappement. Le fait[999D
reculer le curseur de 999 colonnes, vraisemblablement un moyen brutal d'arriver au début de la ligne.[2K
efface la ligne actuelle.\r
est un retour chariot qui ramènera le curseur au début de la ligne en cours et est une séquence d'échappement de style C plutôt qu'une séquence de contrôle de terminal.Mise à jour
Comme d'autres l'ont souligné, ces séquences de contrôle ne sont rien à faire
bash
elles - mêmes mais plutôt le terminal / émulateur sur lequel le texte apparaît. Il était une fois, ces séquences étaient interprétées par un matériel complètement différent. À l'origine, chacun répondrait à des ensembles de codes complètement différents. Pour faire face à cela , lestermcap
et lesterminfo
bibliothèques où utilisés pour écrire du code compatible avec plusieurs terminaux. Latput
commande est une interface vers laterminfo
bibliothèque (letermcap
support peut également être compilé) et est un moyen plus robuste de créer des séquences compatibles.Cela dit, il existe également la norme ANSI X3.64 ou ECMA-48 . Toute implémentation de terminal moderne l'utilisera.
terminfo
ettermcap
sont toujours pertinentes car la mise en œuvre peut être incomplète ou inclure des extensions non standard, mais pour la plupart des cas, il est sûr de supposer que les séquences ANSI communes fonctionneront.La
xterm
FAQ fournit des informations intéressantes sur les différences entre les émulateurs de terminaux modernes (beaucoup essaient juste de s'émulerxterm
) et comment lesxterm
séquences se rapportent aux terminaux VT100 mentionnés dans le lien ci-dessus. Il fournit également une liste définitive desxterm
séquences de contrôle .Bien sûr, la console Linux est également couramment utilisée, une liste définitive des séquences de contrôle pour elle peut être trouvée dans
man console_codes
, ainsi qu'une comparaison avecxterm
.la source
tput
commandes à la place, pour avoir plus de portabilité, iirc (mais au détriment d'une couverture moindre des spécificités de votre terminal). Le VT100 (celui dont parle la page) est supporté par beaucoup (mais tout n'est pas supporté, je crois ...). Mais votre variable TERM peut être définie sur un autre terminal, ce qui pourrait affecter les effets de certaines commandestput
est un moyen plus robuste. Mais c'est la compatibilité ANSI plutôt que le terminal VT100 spécifique qui est maintenant assez omniprésent, bien que j'imagine qu'il est possible de définirxterm
un mode qui ne les accepte pas. Je vais mettre à jour avec plus d'informations à ce sujet, je pense.TERM=xterm
pour, mais ne mettent pas tout en œuvrexterm
.C'est
\033
le caractère d'échappement, et ces séquences ne sont pas spécifiques à bash mais interprétées par le terminal (logiciel ou matériel (via le réseau ou la ligne série)) dans lequel le programme (bash) s'exécute. Il existe de nombreuses séquences de ce type .Ce que chacun fait dépend du terminal dont il dépend, et peut également dépendre de toute séquence précédente modifiant l'état du terminal.
Ceux-ci sont souvent utilisés pour définir les couleurs dans l'invite bash , mais je n'ai pas trouvé vos exemples particuliers sur cette page.
la source
'\ 033 [999D' est drôle. Certains terminaux implémentent moins de séquences d'échappement, ce qui peut être nécessaire si aucun des paramètres \ \ 033 [1G ", \ \ 033 [1; 1H", "\ 033 [1; 1f" ou "\ r" se comporte comme ils devrait, mais qui utilise un affichage de texte de mille colonnes? Ces séquences ont une page de manuel sous Linux: console_codes (4) . bjh21 a une liste détaillée de tous les codes . Selon le programme qui analyse «\ 033», la substitution plus claire «\ e» peut être disponible.
Il n'est vraiment pas prévu que ceux-ci soient utilisés directement - la bonne façon d'émettre des commandes de contrôle de terminal est avec une couche d'abstraction telle que ncurses - mais ils fonctionnent tout aussi bien à partir des littéraux de chaîne.
la source
\033[999D
cela sauvegarderait par rapport aux lignes précédentes. Peut être juste le résultat d'un codage douteux cependant;) Vous pouvez égalementbash
interpréter directement les codes d'échappement, par exemple$'\033[999D'
vous pouvez rechercher "033 term escape list" ou " 033 tput " et voir http://wiki.bash-hackers.org/scripting/terminalcodes pour plus d'informations avant que quelqu'un ne réponde;]
la source