Как писать команды sqlite в сценарии оболочки?

Проблема здесь в том, что вы, по сути, удаляете клавиши Windows из списка модификаторов с помощью чистого mod4. Для того, чтобы Caps Lock был доступен в качестве дополнительного модификатора вместо Window keys, вы должны установить его в другой модификатор. Вы можете использовать модификаторы Mod1 через Mod5 в дополнение к Control, Shift и Mode_switch с i3.

Сначала проверьте, не используются ли модификаторы в используемой вами схеме (без применения .Xmodmap). Вы можете получить список настроек модификаторов с помощью xmodmap -pm. Для компоновки us это возвращает (на моей машине):

xmodmap:  up to 4 keys per modifier, (keycodes in parentheses):

shift       Shift_L (0x32),  Shift_R (0x3e)
lock        Caps_Lock (0x42)
control     Control_L (0x25),  Control_R (0x69)
mod1        Alt_L (0x40),  Alt_R (0x6c),  Meta_L (0xcd)
mod2        Num_Lock (0x4d)
mod3      
mod4        Super_L (0x85),  Super_R (0x86),  Super_L (0xce),  Hyper_L (0xcf)
mod5        ISO_Level3_Shift (0x5c),  Mode_switch (0xcb)

Как вы видите, mod3 в настоящее время не используется. Для того, чтобы его использовать, вам просто нужно поместить в вашу .Xmodmap:

clear lock
keycode 66 = Hyper_R
add mod3 = Hyper_R

Примечание: В данном случае я использовал Hyper_R, поскольку Hyper_L уже была привязана к mod4. А 66 - код ключа Caps Lock. На вашей машине это может быть по-другому.

Теперь вы можете использовать этот модификатор с вашими клавишами i3. Если вы хотите продолжать использовать переменную $mod с вашей конфигурацией, просто установите ее либо в Mod3, либо в Mod4, в зависимости от того, хотите ли вы использовать для этого Caps Lock или Windows keys. Но на самом деле нет необходимости в его использовании (в основном это удобно для облегчения первой установки при выборе между Alt (Mod1) и Windows ключами (Mod4).

Использование нового модификатора так же просто, как:

bindsym Mod3+s exec something
binysym Mod3+Mod4+s exec something_else
-2
19.05.2018, 16:04
1 ответ

sqlite3читает команды из стандартного ввода, что означает, что вы можете передать ему SQL из файла или из командной строки, а не только в интерактивном режиме. sqlite3автоматически завершает работу в конце ввода, поэтому .quitне требуется при интерактивном использовании без -.

Например:

#!/bin/sh

sqlite3 /var/www/dbs/ha.db <<'END_SQL'
.timeout 2000
INSERT INTO table1 SELECT * FROM table2;
DELETE FROM table2;
END_SQL

Также обратите внимание на исправленный синтаксис для DELETE.

Если вам также необходимо создать table2в базе данных:

#!/bin/sh

sqlite3 /var/www/dbs/ha.db <<'END_SQL'
CREATE TABLE IF NOT EXISTS table2 AS SELECT * FROM table1;
INSERT INTO table2 SELECT * FROM table1;
DELETE FROM table1;
END_SQL

Измените DELETE FROM table1;на DROP table1;, если вам нужно удалить table1полностью (, а не только его содержимое ).

4
28.01.2020, 05:16

Теги

Похожие вопросы