Я хочу выполнить однострочную команду SQLite 3 с вложенной строкой из оболочки adb.
Следующая команда РАБОТАЕТ:
adb shell su -c "sqlite3 /data/data/com.android.providers.telephony/databases/mmssms.db """SELECT * FROM sms WHERE read=1""";"
Однако эта команда НЕ РАБОТАЕТ:
adb shell su -c "sqlite3 /data/data/com.android.providers.telephony/databases/mmssms.db """SELECT * FROM sms WHERE address="+0012345" """;"
Как вы заметили, у меня есть изменение 'read = 1' в 'address = "+ 0012345"' Проблема в том, что в SQLite 3 выбранный формат смс должен быть TEST / STRING, а не число.Таким образом, команда выбора заканчивается на (address = ") и не учитывает то, что после нее (+0012345" ')
Есть идеи, как решить эту проблему?
обновление для другого испытания, которое не удалось для меня, но, возможно, даст кому-то направление:
Я попытался добавить «.explain» в командной строке, чтобы посмотреть, какая команда sqlite3получает.
adb shell su -c "sqlite3 /data/data/com.android.providers.telephony/databases/mmssms.db .explain \"SELECT * FROM sms WHERE address=\`\"\`\"+0012345\`\"\`\"\";\""
вывод равен
/system/bin/sh: ": not found
/system/bin/sh: ": not found
sqlite3: Error: too many options: "SELECT * FROM sms WHERE address="+0012345""
Use -help for a list of options.
/system/bin/sh: ": not found
, поэтому кажется, что sqlite3 получает телефонный номер с кавычками "+0012345" по запросу!Однако, когда я удаляю «.explain» вот так
adb shell su -c "sqlite3 /data/data/com.android.providers.telephony/databases/mmssms.db \"SELECT * FROM sms WHERE address=\`\"\`\"+0012345\`\"\`\"\";\""
, я получаю такой вывод:
/system/bin/sh: ": not found
/system/bin/sh: ": not found
/system/bin/sh: ": not found