वर्तमान बैश कमांड-लाइन में पूरे तर्क को हटा दें


13

उपयोग ^W(यूनिक्स-वर्ड-रूबाउट) मैं अपने बैश शेल में वर्तमान कमांड से एक एकल "शब्द" को आसानी से हटा सकता हूं।

हालाँकि, जब उद्धृत तर्कों से निपटना होता है, जिसमें रिक्त स्थान होते हैं (या बैकस्लैश-एस्कैप्ड रिक्त स्थान वाले अयोग्य तर्क) यह अच्छी तरह से काम नहीं करता है क्योंकि यह केवल एक शब्द को हटाता है और पूरे तर्क को नहीं।

इसलिए मैं एक संपूर्ण तर्क को हटाने का तरीका ढूंढ रहा हूं।

उदाहरण (कर्सर हमेशा अंत में होता है):

$ foo --bar "foo bar" meow
[black magic]
$ foo --bar "foo bar"
[black magic]
$ foo --bar
[black magic]
$ foo

एक विकल्प के लिए स्विचिंग zsh है? (मुझे नहीं पता कि इसे zsh या तो ऑफहैंड में कैसे करना है, लेकिन इसमें कुछ कमांड लाइन पार्सिंग कोड है जो लाइन एडिटर (या कम से कम पूरा होने वाले सिस्टम) तक पहुंच योग्य है, ताकि इसे आसान बना दिया जाए)।
गाइल्स 'एसओ- बुराई को रोकना'

जवाबों:


14

बैश में रीडलाइन कमांड हैं जो डिफ़ॉल्ट रूप से बाध्य नहीं हैं। आप उन्हें संदर्भ में पा सकते हैं: http://www.gnu.org/software/bash/manual/html_node/Bindable-Readline-Commands.html#Bindable-Readline-Commands

जिस कमांड को आप ढूंढ रहे हैं उसे कहा जाता है shell-backward-kill-word। आपको पहले एक शॉर्टकट चुनना होगा। चलो उपयोग करते हैं Ctrlp, क्योंकि यह "पिछले कमांड" है - ऊपर तीर के समान।

bind '"\C-p": shell-backward-kill-word'
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.