sqlite3
.sqlite_history
기본적으로 다음 위치에 생성된 명령 기록을 에 저장합니다 .
$HOME/.sqlite_history
이 위치를 다른 곳으로 어떻게 변경할 수 있나요?
예를 들어 mysql
, 이것이 가능합니다. 다음에서 환경 변수를 정의할 수 있습니다.
MYSQL_HISTFILE=/path/to/whatever/file
하지만 해당 환경 변수를 찾을 수 없습니다.sqlite3
export SQLITE_HISTFILE=/tmp/history
효과가 없습니다. 내가 하나 찾았어우편 엽서어떤 분이 같은 질문을 주셨는데 도움이 되는 답변이 없었습니다.
답변1
버전 3.25.3부터 mattmc3이 작성한 것처럼 간단히 SQLITE_HISTORY를 설정하여 기록 파일 이름을 변경할 수 있습니다. 이전 버전에서는 shell.c의 5576행(버전 3.14.1)에 하드코딩되었습니다.
sqlite3_snprintf(nHistory, zHistory,"%s/.sqlite_history", zHome);
따라서 이를 변경하려면 이 스레드에서 언급된 다른 옵션 중 하나는 소스 코드를 편집하고 다시 컴파일하는 것 입니다 .
답변2
몇 가지 가능한 대안을 나열하고,
~/.sqlite_history
다른 파일에 대한 심볼릭 링크를 만듭니다 .HOME=/tmp sqlite3
프로그램이 에 기록을 저장하도록 실행하면 됩니다/tmp/.sqlite_history
. 단, 이는 명령 환경에 실제 홈 디렉터리가 필요하지 않다고 가정합니다.바이너리 파일을 편집하고 Hoov가 찾은 문자열을
"%s/.sqlite_history"
동일한 바이트 수의 다른 문자열로 바꿉니다. 예"/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
사용
LD_PRELOAD
틈 메우는 물건나는 또 다른 질문에서 통화"/tmp/adb.log"
중에 하나의 파일 이름(이 경우)을 다른 파일 이름으로 변경하라고 제안했습니다open()
.
답변3
2018년 10월 10일 기준새로운 변수가 생겼나봐요를 추가하는 $SQLITE_HISTORY
것은 이 문제를 해결하는 것입니다.