मैं clear
हर बार जब मैं टर्मिनल में कुछ कमांड टाइप करता हूं तो कमांड निष्पादित करने के लिए बैश कॉन्फ़िगर करना चाहता हूं (मेरी कमांड निष्पादित करने से पहले)। मैं उसे कैसे कर सकता हूँ?
मैं डेबियन लिनक्स का उपयोग कर रहा हूं।
मैं clear
हर बार जब मैं टर्मिनल में कुछ कमांड टाइप करता हूं तो कमांड निष्पादित करने के लिए बैश कॉन्फ़िगर करना चाहता हूं (मेरी कमांड निष्पादित करने से पहले)। मैं उसे कैसे कर सकता हूँ?
मैं डेबियन लिनक्स का उपयोग कर रहा हूं।
जवाबों:
बैश में एक precommand हुक होता है । की तरह।
preexec () {
clear
}
preexec_invoke_exec () {
[ -n "$COMP_LINE" ] && return # do nothing if completing
[ "$BASH_COMMAND" = "$PROMPT_COMMAND" ] && return # don't cause a preexec for $PROMPT_COMMAND
local this_command=`history 1 | sed -e "s/^[ ]*[0-9]*[ ]*//g"`; # obtain the command from the history, removing the history number at the beginning
preexec "$this_command"
}
trap 'preexec_invoke_exec' DEBUG
Enter
कमांड को निष्पादित करने से पहले स्क्रीन को प्रेस करना चाहिए । यह मेरे लिए इस तरह काम करता है। Preexec हुक को प्रत्येक इंटरेक्टिव कमांड के लिए निष्पादित किया जाता है, इससे कोई फर्क नहीं पड़ता कि कमांड एक अंतर्निहित या बाहरी कमांड या कई कमांड है।
[ "$BASH_COMMAND" = "$PROMPT_COMMAND" ] && return;
है कि यदि समस्या पूरी हो गई है तो PROPLT_COMMAND को चलाया जा रहा है और वास्तविक कमांड के बाद भी फंस गया है। इसके अलावा क्या कोई मुझे बता सकता है कि local this_command=`history 1 | sed -e "s/^[ ]*[0-9]*[ ]*//g"`;
यहाँ क्यों है?
history -1
अंतिम कमांड लाइन को प्रिंट करता है, जिसमें इतिहास संख्या सामने होती है। इतिहास फ़िल्टर बंद संख्या को इतिहास से हटाता है।
bind 'RETURN: "\e[1~clear; \e[4~\n"'
उसके बाद हर बार जब आप returnसिर्फ लिखने के बजाय दबाते हैं तो \n
यह लाइन की शुरुआत में चला जाएगा, पाठ दर्ज करें clear;
, फिर अंत में जाएं और \n
अपेक्षा के अनुसार दर्ज करें ।
clear
।
clear
में कमांड और कमांड आउटपुट गायब नहीं होने से पहले निष्पादित किया जाता है। हालाँकि शीघ्र होने की स्थिति में यह होता है।
clear;
प्रत्येक अतिरिक्त के लिए आउटपुट में सम्मिलित करता है \n
।
bind "\"\\eOQ\":\"\e[1~ls;#\\n\""
यह शुरुआत में ls;#
चलेगा, टिप्पणी करते हुए टाइप करें कि क्या था, और ls
कमांड को ठीक से चलाएं ! धन्यवाद!
आज पूछे गए एक सवाल से (उपयोगकर्ता @ aecolley के जवाब के लिए क्रेडिट के साथ ):
bind '"\C-m": "\C-l\C-j"'
\C-m
'Enter' की अनुकरण, \C-l
अनुकरण Ctrl+l
के रूप में यह स्पष्ट है और \C-j
है "न्यू लाइन और मांगपत्र", इसलिए आदेश Ctrl + L & Ctrl + J के लिए Enter कुंजी बाध्यकारी है
यह GNU बैश, वर्जन 3.2.53 (1) -release (x86_64-apple-darwin14) पर काम करता है और इस थ्रेड पर अन्य उत्तर नहीं हैं। इसके अलावा, यह इतिहास को 'स्पष्ट' कमांड के साथ हर दूसरे कमांड को प्रदूषित नहीं करता है।
cb4() {
preexec () {
clear
}
}
यह एक हुक का उपयोग करता है preexec
, जो पुष्टि करता है कि zsh के साथ भी काम करता है
फिर आपके द्वारा चलाए जाने वाले प्रत्येक आदेश से पहले कोई भी सत्र जो आप स्वतः स्पष्ट करना चाहते हैं: cb4
preexec () {
clear
}
शब्द के clear
साथ बदलेंtput reset
tput
वैकल्पिक है, लेकिन रीसेट प्रक्रिया को गति देता है