MySQL कंसोल: Ctrl + C मुझे पागल कर रहा है


24

MySQL कंसोल में कुछ ऐसा है जो मुझे पागल कर देता है। जब मैं टाइप की जा रही वर्तमान कमांड को रद्द करने के लिए ctrl+ हिट करता है c, तो टर्मिनल से बाहर निकलता है।

हर टर्मिनल मैं पता है कि में ( *nixटर्मिनल, Python, PostgreSQL), ctrl+ cवर्तमान आदेश को रद्द और ctrl+d टर्मिनल बाहर निकालता है।

इस मुद्दे को 2003 में रिपोर्ट किया गया है , और तब से कई बार टकरा गया है।

क्या कोई तरीका है:

  • इस व्यवहार को बदलें, या
  • MySQL देव टीम को समझाएं कि यह वास्तव में कष्टप्रद है?

जवाबों:


6

व्यवहार को बदलने के लिए, mysql CLI के लिए स्रोत डाउनलोड करें और SIGINTहैंडलर को संशोधित करने के लिए व्यवहार करें जैसा कि आप फिट देखते हैं, फिर पुन: स्थापित करें और इंस्टॉल करें।


1
क्या यह संभावित खतरनाक नहीं है? इस बात की कोई गारंटी नहीं है कि यह भविष्य के संस्करणों के लिए काम करेगा। इसके अलावा , ऐसा लगता है कि यह काम करेगा, लेकिन आपको कैसे पता चलेगा कि आपको बाद में पूरी तरह से असंबंधित जगह पर कुछ अजीब व्यवहार नहीं मिलेगा?
पचेरियर

21

क्लाइंट का कम से कम संस्करण 5.6.14 है SIGINT हैंडलर को पूरी तरह से अनदेखा करने के --sigint- इग्नोर विकल्प है। ऐसा प्रतीत होता है कि 7 अक्टूबर, 2004 को जोड़ा गया है - इसलिए यह कम से कम कुछ समय के लिए रहा है। मैंने अभी इसका परीक्षण किया है, और यह MySQL क्लाइंट को रद्द करने से CTRL-C रखता है। हालाँकि, यह अच्छा होगा यदि CTRL-C वर्तमान कमांड लाइन बफर को भी रद्द कर देगा जैसे कि यह BASH शेल पर होता है - जैसा कि PostgreSQL CLI करता है। मैंने MySQL को फोर्क किया है ताकि यह देखा जा सके कि इस तरह की चीज़ को लागू करना कितना कठिन होगा। जब / यदि यह तैयार है, तो मैं एक टारबॉल लिंक के साथ एक Homebrew सूत्र पोस्ट करूँगा।

अद्यतन 1 कभी उन दिनों में से एक है? मैंने वादा किया पैच बनाया , और फिर मैंने इसे प्रदर्शित करने के लिए एक वीडियो बनाने का फैसला किया। इसने काम कर दिया! हालाँकि, मैं इसे अक्षम नहीं कर सका! खैर, यह पता चला है कि MySQL वास्तव में पिछले साल कोर क्लाइंट की कार्यक्षमता में बेक किया गया था ! हां, इस Q को A को कम से कम MySQL 5.7.3-794-g901d27f का क्लाइंट डाउनलोड करना है। इसकी कार्यक्षमता हम सभी चाहते हैं।

उदाहरण कमांड लाइन से सिर्फ --sigint-ign ध्वज जोड़ें:

mysql --host=127.0.0.1 --port=8900 --user=root -p --sigint-ignore DBNAME

या, जैसा मैंने किया और निम्न सामग्री के साथ $HOME/.my.cnf( %USERPROFILE%/.my.cnfविंडोज पर) अपने उपयोगकर्ता खाते के लिए एक MySQL कॉन्फिग फ़ाइल बनाएँ :

[mysql]
sigint-ignore=TRUE

यह सुनिश्चित करेगा कि सभी mysqlनिष्पादन कष्टप्रद Ctrl-C को अनदेखा करें और एक अच्छे SQL क्लाइंट की तरह व्यवहार करें।


19

जबकि ctrl+ cव्यवहार कष्टप्रद है, आप अभी भी \cवर्तमान क्वेरी को रद्द करने के लिए उपयोग कर सकते हैं । आपको बस अपने आप को प्रशिक्षित करना है कि mysql CLI का उपयोग करते समय, आप + के \cबजाय उपयोग करते हैं !ctrlc


1
वह लड़का कौन है जो इस विचार के साथ आया था? हम उसका सिर चाहते हैं।
पचेरियर

1
आप लाइन की शुरुआत को हटाने के लिए Ctrl + U का उपयोग कर सकते हैं, और Ctrl + W एक शब्द को पीछे हटाने के लिए।
डेमियन la Ceallaigh

9

खुशखबरी: MySQL की ^ C कार्यक्षमता अंततः # 66583 द्वारा तय की गई है ।

से 5.7.0 बदलाव का:

इससे पहले, mysql में Control + C ने वर्तमान स्टेटमेंट को बाधित कर दिया था यदि कोई था या नहीं तो mysql से बाहर निकल गया। अब नियंत्रण + सी वर्तमान कथन को बाधित करता है यदि कोई था, या किसी आंशिक इनपुट लाइन को अन्यथा रद्द करता है, लेकिन बाहर नहीं निकलता है।


मैं 5.6.35 का उपयोग कर रहा हूं और सत्यापित किया गया है कि यह कोई समस्या नहीं है।
flow2k

1

आप क्लाइंट के किस संस्करण का उपयोग कर रहे हैं? मुझे याद है कि यह पुराना व्यवहार है, लेकिन 5.1 और 5.5 के हालिया संस्करण क्लाइंट को बाहर किए बिना सिर्फ रनिंग कमांड को रद्द करते हैं। तो फिर यह हो सकता है कि मैं पेरकोना बिल्ड का उपयोग कर रहा हूं। अगर उनके मामले में आप सिर्फ अपने क्लाइंट को चलाने की कोशिश कर सकते हैं।


हम्म, मैं 5.5 Percona और ctrl + c चला रहा हूं, अभी भी mysql क्लाइंट (वर्तमान sql कमांड नहीं)
डेरेक डाउनी

मुझे लगता है कि मैंने ओपी को गलत बताया। मेरी प्रतिक्रिया एक कमांड को संबोधित कर रही थी जो कि निष्पादित होने के बीच में थी, न कि आपको खाली कमांड चलाने की इच्छा।
atxdba

मैं @atxdba के साथ सम्‍मिलित हूं - मैं भी 5.5 की Percona बिल्ड चला रहा हूं, और ctrl + c वर्तमान में निष्पादित कमांड से बाहर हो जाता है। यदि कोई कमांड निष्पादित नहीं होता है, तो यह सीएलआई से बाहर हो जाता है। यह हो सकता है कि ctrl + d एक ऐसे शेल से बाहर निकले जो चल रहा हो, लेकिन यदि आपके पास शेल के भीतर कोई स्क्रिप्ट चल रही है, तो यदि आप ctrl + c ... विभिन्न ऐप्स / शेल / स्क्रिप्ट के लिए अलग-अलग कमांड मारते हैं, तो यह रुक जाएगा! भ्रामक हो सकता है ...: ~ s
डेव रिक्स

@DaveRix मैं भी सहमत हूं, ctrl + c एक क्वेरी से बाहर निकलता है जो वर्तमान में निष्पादित हो रहा है। लेकिन यह दुर्भाग्य से ओपी के बारे में नहीं था।
डेरेक डाउनी
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.