2013-04-01 12 views
8

Quando si utilizza sqlite3 attraverso adb shell tasti freccia, invece di spostare il cursore nella posizione desiderata o evocare la funzione di storia, la seguente è mostrato nella schermata: ^[[A, ^[[B, ^[[C, ^[[D.Tasti cursore non funziona se si utilizza sqlite3 dalla shell adb

Sto utilizzando Mac OS X e ho provato Terminal e iTerm emulatori di terminale.

Qualcuno sa come risolvere questo problema?

+0

La stessa situazione è con Linux. I tasti freccia di Windows funzionano correttamente. –

+0

Qualcosa come [rlwrap] (http://freecode.com/projects/rlwrap) risolverà il problema? – chobok

risposta

4

per consentire la modifica e la storia in ingresso di un programma di console, il programma deve essere collegato con la libreria readline.

Il sqlite3 strumento supporta readline, ma su Android, supporto readline è stato disabilitato. (Probabilmente perché readline è concesso in licenza solo sotto licenza GPL.)

+0

In realtà, quando mi lancio 'adb shell' la cronologia dei comandi sembra funzionare, almeno in parte, perché posso passare ai comandi eseguiti in precedenza. Oltre al problema con la libreria 'readline', il punto principale qui è che l'applicazione non sta mappando correttamente i tasti freccia, perché non riconosce nemmeno i tasti sinistro e destro. Qualche idea su questo? –

+0

'adb' viene eseguito parzialmente sull'host. I tasti cursore sarebbero gestiti da 'readline'. –

+0

Grazie a @CL .. Buono a sapersi. Quindi probabilmente non esiste un modo semplice per far funzionare le funzionalità di modifica delle righe e di cronologia. Tuttavia, se qualcuno ha trovato una soluzione, per favore postala qui. –

4

Una soluzione alternativa consiste nell'utilizzare una versione locale di SQLite con supporto readline.

  1. Copiare un file di database dal dispositivo al computer locale:
    adb pull <database-file-on-device>

  2. Utilizzare la versione locale di SQLite per accedere al file di database:
    sqlite3 <database-file-on-local>

  3. Se hai fatto modifiche è possibile trasferirli sul dispositivo. Copiare il file di database locale dal computer locale al dispositivo:
    sqlite3 <database-file-on-local> <database-file-on-device>

2

È possibile utilizzare la funzionalità di comando precedente nella adb shell. Quindi basta adb shell. Quindi andare nella directory/data/data // databases. Da qui eseguire (per esempio): sqlite3 "select * from"

Quindi è possibile utilizzare fino freccia per rifare quel comando. Una specie di trucco, ma molto meglio di dover ridigitare il comando all'interno del prompt interattivo di sqlite3.