altera a localização do arquivo .sqlite_history

4

sqlite3 armazena o histórico de comandos em .sqlite_history , que é criado por padrão em:

$HOME/.sqlite_history

Como posso alterar este local para outro lugar?

Isso é possível, por exemplo, com mysql , onde eu posso definir a variável de ambiente

MYSQL_HISTFILE=/path/to/whatever/file 

Mas não encontrei nenhuma variável de ambiente correspondente para sqlite3

export SQLITE_HISTFILE=/tmp/history 

não tem efeito. Eu encontrei um post onde alguém pergunta pergunta, mas nenhuma resposta útil é dada.

    
por Martin Vegter 31.08.2016 / 08:28

3 respostas

5

Parece que é codificado na linha 5576 no shell.c (versão 3.14.1):

sqlite3_snprintf(nHistory, zHistory,"%s/.sqlite_history", zHome);

Então, para mudar isso, sua única opção é editar a fonte e recompilar.

    
por 31.08.2016 / 09:44
3

Para listar algumas das alternativas possíveis,

  1. crie ~/.sqlite_history em um link simbólico para outro arquivo.

  2. simplesmente execute HOME=/tmp sqlite3 para que o programa salve o histórico em /tmp/.sqlite_history , embora isso pressuponha que você não precisa do diretório pessoal real dentro do ambiente de comando.

  3. edite o binário e substitua a string "%s/.sqlite_history" , encontrada por Hoov, por outra string com o mesmo número de bytes, por exemplo, "/tmp/sqlitehistory" :

    sed < /usr/bin/sqlite3 's|%s/.sqlite_history|/tmp/sqlitehistory|' >/tmp/sqlite3
    cmp -l /usr/bin/sqlite3 /tmp/sqlite3 # check no extraneous differences
    chmod +x /tmp/sqlite3
    /tmp/sqlite3
    
  4. use o LD_PRELOAD correção que propus em outra pergunta para alterar um nome de arquivo ( "/tmp/adb.log" nesse caso) para outro durante uma chamada open() .

por 31.08.2016 / 14:35
1

A partir de 10 de outubro de 2018 parece que uma nova variável , $SQLITE_HISTORY , foi adicionada ao endereço isso.

    
por 26.11.2018 / 04:14