एक sqlite3 इंटरैक्टिव खोल में स्वत: पूर्ण सक्षम करें


22

मैं एक मशीन पर sqlite3 का उपयोग कर रहा हूं जहां मैं टैब पूरा करने का उपयोग कर सकता हूं (यानी .read abc स्वचालित रूप से .read abcdefghij.db पर स्वत: पूर्ण हो जाएगा। मैं जानना चाहता हूं कि इसे अपनी व्यक्तिगत मशीन पर कैसे सक्षम किया जाए।

दोनों मशीनें ubuntu linux हैं और शेल बैश है। मैं sqlite इंटरेक्टिव प्रॉम्प्ट में स्वतः पूर्णता की बात कर रहा हूं।

मूल रूप से dba पर पोस्ट किया गया ।

जवाबों:


12

रीडलाइन सुपरओर्ट के साथ कार्यक्रम को संकलित करें। रीडलाइन एक सामान्य लाइब्रेरी है जो बैश और पाइथन जैसे दुभाषियों में उपयोगकर्ता इनपुट को संभालती है। स्रोत, निर्भरता प्राप्त करें और साथ कॉन्फ़िगर करें:

user@computer in: ~/src/sqlite-autoconf-3071602
$ ./configure --enable-readline=yes

विवरण के लिए INSTALL फ़ाइल से परामर्श करें। इसके अलावा, यह ध्यान देने योग्य है कि संभवतः आपके डिस्ट्रो के लिए पहले से पैक की गई रीडलाइन समर्थन के साथ sqlite3 के बायनेरिज़ हैं। चारों ओर देखो।


1
आप आवश्यक हेडर के साथ "-देव" पैकेज को याद कर रहे थे।
урослав Рахматуллин

15

यदि आप sqlite3 संकलित नहीं करना चाहते हैं तो आप rlwrap का उपयोग कर सकते हैं । बस चलाएं sudo apt install rlwrap, और फिर अपने में sqlite3 के लिए एक उपनाम सेट करें .bashrc:

alias sqlite="rlwrap -a -N -c -i sqlite3"

-cविकल्प आपको फ़ाइल नाम पूर्ण करने देता है।

और आप ~/.rlwrap/sqlite3_completionsकीवर्ड पूर्णता के लिए एक फ़ाइल बना सकते हैं :

ABORT ACTION ADD AFTER ALL ALTER ANALYZE AND AS ASC ATTACH AUTOINCREMENT BEFORE BEGIN BETWEEN BY CASCADE CASE CAST CHECK COLLATE COLUMN COMMIT CONFLICT CONSTRAINT CREATE CROSS CURRENT_DATE CURRENT_TIME CURRENT_TIMESTAMP DATABASE DEFAULT DEFERRABLE DEFERRED DELETE DESC DETACH DISTINCT DROP EACH ELSE END ESCAPE EXCEPT EXCLUSIVE EXISTS EXPLAIN FAIL FOR FOREIGN FROM FULL GLOB GROUP HAVING IF IGNORE IMMEDIATE IN INDEX INDEXED INITIALLY INNER INSERT INSTEAD INTERSECT INTO IS ISNULL JOIN KEY LEFT LIKE LIMIT MATCH NATURAL NO NOT NOTNULL NULL OF OFFSET ON OR ORDER OUTER PLAN PRAGMA PRIMARY QUERY RAISE RECURSIVE REFERENCES REGEXP REINDEX RELEASE RENAME REPLACE RESTRICT RIGHT ROLLBACK ROW SAVEPOINT SELECT SET TABLE TEMP TEMPORARY THEN TO TRANSACTION TRIGGER UNION UNIQUE UPDATE USING VACUUM VALUES VIEW VIRTUAL WHEN WHERE WITH WITHOUT

-iविकल्प कीवर्ड पूरा होने के मामले असंवेदनशील बना देता है।


2
यह उत्तर बहुत अधिक वोटों का हकदार है। यह भी ध्यान दें कि मुझे -NUbuntu के sqlite3 के साथ काम पूरा करने के लिए विकल्प को हटाना पड़ा ।
जिहनी

सभी उपयोगकर्ताओं के लिए सिस्टम-वाइड पूर्णता फ़ाइलों को रखने के लिए निर्देशिका के /usr/share/rlwrap/completionsरूप में (दस्तावेज़ में man rlwrap) निर्देशिका भी है । एक पूरा होने वाले फ़ाइल नामों पर ध्यान देने की बात यह _completionहै कि प्रत्यय के साथ समाप्त नहीं होना चाहिए जैसा कि प्रति-उपयोगकर्ता ~/.rlwrapनिर्देशिका के साथ होता है।

1
rlwrap -a -N -c -i -f ~/.rlwrap/sqlite3_completions sqlite3डेबियन उपयोगकर्ताओं के लिए। echo '.help' | sqlite3 | grep -o '^\.[a-z]* ' >> ~/.rlwrap/sqlite3_completionsस्वतः पूर्ण सभी आदेशों को स्वतः पूर्ण करने के लिए।
झाझा
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.