2010-04-12 14 views
5

Situation imaginaire: Vous avez utilisé mysqldump pour créer une sauvegarde d'une base de données mysql. Cette base de données contient des colonnes qui sont des blobs. Cela signifie que votre « texte » fichiers de sauvegarde contient à la fois des chaînes et des données binaires (données binaires stockées sous forme de chaînes?)Pourquoi piping texte binaire à l'écran souvent Horck un terminal

Si votre chat ce fichier à l'écran

$ cat dump.mysql 

vous obtiendrez souvent des résultats inattendus. Le terminal commencera à biper, et ensuite la sortie finira par défiler. Vous aurez souvent des bêtisiers entrés sur votre terminal comme si vous les aviez tapés, et parfois vos invites et tout ce que vous tapez seront des caractères inutiles.

Pourquoi cela se produit-il? Autrement dit, je pense que je cherche un aperçu de ce qui se passe réellement lorsque vous stockez des chaînes binaires dans un fichier, et quand vous chattez ces fichiers, et quand les résultats du chat sont signalés au terminal, et toutes les autres étapes J'ai manqué.

Répondre

6

Lorsque vous créez un fichier binaire, vous pouvez par inadvertance send control characters accéder au terminal.

Si une application de terminal veut envoyer un bip par exemple, elle envoie le binaire suivant au terminal: 0x007 (SYS V uniquement).

La même chose vaut pour les couleurs, la position du curseur et d'autres.

+0

Lorsque vous dites, "l'application du terminal envoie le binaire suivant au terminal ..." quelle est la différence entre le terminal et l'application du terminal? –

2

Lorsque vous collez les données binaires à l'écran, le terminal tente d'interpréter ces données binaires en ASCII (ou UTF). Certains caractères sont capables de contrôler le terminal. Par exemple,

echo "^[[0;31;40m" # The first ^[ comes from pressing Ctrl+v, Esc 

Mettra en arrière-plan le noir et le premier plan en rouge. Utilisez reset pour que votre terminal redevienne normal.