2010-04-12 4 views
5

Imaginary Situazione: Hai usato mysqldump per creare un backup di un database mysql. Questo database ha colonne che sono BLOB. Ciò significa che i file di dump “testo” contiene entrambe le stringhe e dati binari (dati binari memorizzati come stringhe?)Perché Piping testo binario sullo schermo spesso Horck a Terminal

Se gatto questo file nella schermata

$ cat dump.mysql 

spesso si ottengono risultati inaspettati. Il terminale inizierà a emettere un segnale acustico, e quindi l'output termina scorrendo perché spesso i chacters immessi sul terminale vengono immessi sul tuo terminale, perché con la scrittura li hai digitati, ea volte i tuoi prompt e tutto ciò che digiti saranno caratteri illeggibili.

Perché succede? In altre parole, penso che sto cercando una panoramica di ciò che accade realmente quando si memorizzano le stringhe binarie in un file, e quando si digeriscono quei file, e quando i risultati del gatto vengono segnalati al terminale, e ogni altra procedura Mi manca.

risposta

6

Quando si esegue il cat di un file binario è possibile inavvertitamente send control characters al terminale.

Se un'applicazione terminale invia un segnale acustico, ad esempio, invia il seguente binario al terminale: 0x007 (solo SYS V).

Lo stesso vale per i colori, la posizione del cursore e altri.

+0

Quando si dice "l'applicazione terminale invia il seguente binario al terminale ..." qual è la differenza tra il terminale e l'applicazione terminale? –

2

Quando si catano i dati binari sullo schermo, il terminale tenta di interpretare i dati binari in ASCII (o UTF). Alcuni personaggi sono in grado di controllare il terminale. Ad esempio,

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

Ruoterà lo sfondo nero e il colore di primo piano rosso. Utilizzare reset per riportare il terminale alla normalità.