Il y a beaucoup de questions sur SE qui montrent comment récupérer du terminal cassé cat /dev/urandom
. Pour ceux qui ne connaissent pas ce problème - voici de quoi il s'agit:
- Vous exécutez
cat /dev/urandom
ou équivalent (par exemple,cat binary_file.dat
). - Les ordures sont imprimées.
Ce serait bien ... sauf que votre terminal continue d'imprimer les ordures même après la fin de la commande! Voici une capture d'écran d'un texte mal rendu qui est en fait une sortie g ++:
Je suppose que les gens avaient raison sur le fait que les erreurs C ++ sont parfois trop cryptiques!
La solution habituelle consiste à exécuter stty sane && reset
, même si c'est un peu ennuyeux de l'exécuter à chaque fois que cela se produit.
Pour cette raison, ce sur quoi je veux me concentrer dans cette question est la raison initiale pour laquelle cela se produit et comment empêcher le terminal de se casser après l'émission d'une telle commande. Je ne cherche pas de solutions telles que le transfert des commandes incriminées vers tr
ou xxd
, car cela nécessite que vous sachiez que le programme / fichier génère des données binaires avant de l'exécuter / l'imprimer, et doit être mémorisé chaque fois que vous produisez de telles données. .
J'ai remarqué le même comportement dans URxvt, PuTTY et Linux frame buffer, donc je ne pense pas que ce soit un problème spécifique au terminal. Mon principal suspect est que la sortie aléatoire contient du code d'échappement ANSI qui inverse l'encodage des caractères (en fait, si vous exécutez à cat /dev/urandom
nouveau, il y a de fortes chances que cela brise le terminal, ce qui semble confirmer cette théorie). Si c'est vrai, quel est ce code d'échappement? Existe-t-il des moyens standard de le désactiver?