कैसे जल्दी से स्टोर और उपयोग अक्सर आदेशों का उपयोग करें?


37

मेरे पास बहुत सारी आज्ञाएं हैं जिन्हें मुझे नियमित रूप से निष्पादित करने की आवश्यकता है, अक्सर थोड़ी सी भिन्नता के साथ।

अभी मैं उन सभी को संग्रहीत कर रहा हूं .bash_historyऔर उनका उपयोग करने के लिए CTRL- Rउनका उपयोग करने के लिए, लेकिन मुझे आश्चर्य है कि क्या कोई बेहतर तरीका है। मैं जिस चीज़ की तलाश कर रहा हूँ:

  • एक नई कमांड जोड़ना आसान है
  • वांछित आदेश को खोजना और फिर से निष्पादित करना आसान है
  • सुझावों में अवांछित आदेशों से बचें

दुर्भाग्य से, bash_history तीसरी मांग पर इतना मजबूत नहीं है: अगर मैं कुछ करता हूं cdऔर ls, यह इतिहास फ़ाइल को जल्दी से भरता है। मैंने हाल ही में इसके बारे में सीखा है HIST_SIZEऔर आप डुप्लिकेट या कुछ आदेशों से बचने के लिए इतिहास को कॉन्फ़िगर कर सकते हैं, लेकिन यह सब कॉन्फ़िगर करने से पहले, मैं यह सुनिश्चित करना चाहता था कि यह सबसे अच्छा तरीका है।


7
हर रोज आदेश के लिए, aliasशायद अधिक उपयोगी। जैसे। alias gfc="git fetch origin"
नंबर

जवाबों:


20

मुझे निम्न रीडलाइन कमांड बहुत उपयोगी लगती हैं

history-search-backward,
history-search-forward

(ध्यान रखें कि वे सामान्य से भिन्न हैं reverse-search-history, - , - ) forward-search-historyसे बँधे हुए हैं ।CtrlRCtrlS

मेरे पास ये कमांड हैं Ctrl- Upऔर Ctrl- और Downनिम्नलिखित पंक्तियाँ इसमें शामिल हैं ~/.inputrc:

"\e[1;5A": history-search-backward
"\e[1;5B": history-search-forward

वे कैसे काम करते हैं: कमांड की शुरुआत के कुछ वर्ण लिखें, प्रेस करें Ctrl- Upऔर उस उपसर्ग के साथ शुरू होने वाले अगले पुराने कमांड को दिखाया जाएगा, अगला देखने के लिए फिर से दबाएं, और इसी तरह। जब आप संतुष्ट होते हैं, तो संभवतः कमांड को संशोधित करने के बाद, Enterनिष्पादित करने के लिए दबाएं ।


1
इसके लिए +1, मैं ऐसा ही करता हूं, हालांकि मेरे पास उनके लिए अप एरो और डाउन एरो कीज (कोई CTRL मॉडिफायर) नहीं है, जो मेरे लिए काम करता है। यदि आप इसी तरह से उन पंक्तियों को करना चाहते हैं जिनकी आपको आवश्यकता है "\e[B": history-search-forwardऔर"\e[A": history-search-backward
साइमन व्हाइटेकर

यह भी विचार करें कि आपके बफर पर्याप्त रूप से बड़े हैं यह सुनिश्चित करने HISTFILESIZEऔर / या HISTSIZE(zsh केवल समर्थन करता है HISTSIZE, बैश दोनों का समर्थन करता है)। SO प्रश्न HISTSIZE बनाम HISTFILESIZE को मारता है? आगे रोशन कर सकते हैं।
एडम काट्ज

56

एक और टिप: मैं कभी-कभी टिप्पणियों को बुकमार्क / कमांड को टैग करने के लिए उपयोग करता हूं:

my_command #bookmark

फिर:

[ctrl-r]#bookmark

इसे प्यार करो! - अच्छा।
ग्रेग

17
Bashtags! प्रतिभा। :-)
साइमन व्हाइटेकर

बहुत अच्छा! मैं अपने mysql-cli के लिए भी इसका इस्तेमाल करने जा रहा हूँ :)
Konerak

वह तो बहुत ही बढ़िया है! दुर्भाग्य से, zshell एक इंटरैक्टिव सत्र में एक टिप्पणी की शुरुआत के रूप में # व्यवहार नहीं करता है। जानिए इसके लिए ऐसी ही एक ट्रिक?
नाथन लॉन्ग

1
@NathanLong: $_bookmark। यह तर्क दिया जा सकता है कि यह एक भयानक हैक है जो इस तथ्य का शोषण करता है कि कोई भी अस्थिर चर कुछ भी नहीं बढ़ाता है, लेकिन यह निश्चित रूप से काम करता है, इस चेतावनी के साथ कि रिक्त स्थान की अनुमति नहीं है (_ के बजाय का उपयोग करें)।
काम्पू

7

हालांकि बहुत सीमित दायरे के बावजूद, मैं इन दो विस्तार प्लेसहोल्डर्स को इंगित करना चाहता हूं:

!! 

अंतिम आदेश के लिए एक प्लेसहोल्डर विस्तार है। यदि आप sudoकमांड के सामने रखना भूल गए तो उपयोगी है ।

!$ 

पिछले पैरामीटर को दोहराता है। उपयोगी है अगर आप के साथ एक अलग कमांड दोहराना चाहते हैंa/very/long/path/name/you/do/not/want/to/type/again


हाँ, शानदार टिप ... अगर केवल मुझे उनका उपयोग करना याद है :)
20

6

'उपनाम' का उपयोग करें

alias इस के लिए एक महान उपकरण है।

  • आप वर्तमान शेल सत्र के दौरान उपयोग की जाने वाली कमांड लाइन पर एक को आसानी से घोषित कर सकते हैं।
  • यदि आप भविष्य में इसका उपयोग करेंगे, तो आप इसे अपने शेल कॉन्फ़िगरेशन में जोड़ सकते हैं।

जब आप एक उपनाम का उपयोग करते हैं, तो यह बिल्कुल वैसा ही है जैसे कि आपने इसे टाइप किया है, इसलिए यह काफी लचीला है। उदाहरण के लिए, आप इसका उपयोग पाइप से कर सकते हैं:

alias findfoo="grep 'foo'"
echo 'foo1 \n foo2 \n bar1 \n bar2 \n foo3' | findfoo # Does your custom grep

आपको पहले से निर्दिष्ट किसी भी झंडे को पारित करके "मामूली बदलाव" करने में सक्षम होना चाहिए।

echo 'foo1 \n foo2 \n bar1 \n bar2 \n foo3' | findfoo -v # finds non-matches

5

मैं अपने लगातार आदेशों के लिए न्यूनतम शेल स्क्रिप्ट बनाता हूं और उन्हें संक्षिप्त नाम देता हूं। वे सभी एक ही स्थान पर संग्रहीत होते हैं, जिसे जोड़ा जाता है PATH

इस तरह मेरे पास बहुत ही जटिल कमांड के लिए शॉर्टकट एक्सेस है, और इसके विपरीत aliasमैं अपने कार्य के परिवर्तनशील भागों को अपने शॉर्टकट के कमांड लाइन तर्कों में बदल सकता हूं।


3
यदि आप केवल तर्क पारित करना चाहते हैं, तो इसके बजाय कार्यों को परिभाषित करने पर विचार करें। यदि आपको पूर्ण स्क्रिप्ट की आवश्यकता है, तो यह एक अच्छा समाधान है :)
कोनरक

@Konerak मुझे वह कोशिश करनी होगी। मैं आमतौर पर केवल एक स्क्रिप्ट बनाता हूं, लेकिन फ़ंक्शंस को परिभाषित करना बहुत क्लीनर होगा, मैं शर्त लगाता हूं।
ixtmixilix

4

मैं Gb में .bash_history की एक प्रति बना रहा हूं । इसे सरल बनाने के लिए, मैंने सेट किया है

# don't put duplicate lines in the history
# don't save commands which start with a space
HISTCONTROL=ignoredups:erasedups:ignorespace

# append to the history file, don't overwrite it
shopt -s histappend

, सफाई स्क्रिप्ट में .bashrc , और निम्न कमांड (सामान्य उपयोग के लिए संशोधित)

# Ensure a single space at the end of each line to easier add more parameters
sed -i -e 's/ *$/ /' "~/.bash_history"

sort --unique --output="~/.bash_history" "~/.bash_history"

जो मैं लाइनों को जोड़ने से पहले चलाता हूं git gui। चूंकि इतिहास फ़ाइल को हर कमांड के साथ संशोधित किया गया है, इसलिए मुझे उस विशिष्ट रिपॉजिटरी को अपडेट करने के लिए एक विशेष कमांड भी मिली है:

git stash && git pull && git stash pop

+1 मुख्य रूप से उल्लेख करने के लिए HISTCONTROL=ignorespace, जो इतिहास को कभी-कभी अव्यवस्थित नहीं करने के लिए महत्वपूर्ण है।
क्वॉडलिबिटर

2

इतिहास से जुड़े अन्य सभी उत्तरों में से।

मैं सेट करता हूं

HISTFILESIZE=2024
HISTSIZE=1024

~ में / .bash_profile

अन्य टिप्पणियों के अलावा: इतिहास

एक और उपयोगी सुविधा ...

एक इतिहास की शुरुआत के साथ याद करते हैं

!first few letters<ESC>Ctrl-E

पिछले आदेश को याद करेंगे जो पहले कुछ अक्षरों से शुरू हुआ था

उदाहरण के लिए:

!find<ESC>Ctrl-E

आपने एक GUI, या कमांड लाइन का उपयोग कर रहे हैं या नहीं इसका उल्लेख नहीं किया। यदि आप GUI का उपयोग कर रहे हैं, तो आप सामान्यतः उपयोग किए गए कमांड, उपयोगकर्ता, पासवर्ड, यूआरएल, आदि को कॉपी / पेस्ट करने के लिए लगातार क्लिपबोर्ड प्रबंधकों में से एक का उपयोग कर सकते हैं।


वाह, !find<ESC>CTRL-Eकाम करता है, लेकिन मुझे संदेह है कि मैं इसे कल याद रख पाऊंगा। वह ESC CTRL-E क्या है?
कोनरक

विस्तारित कुंजी के लिए सिर्फ एक बंधन
bsd

0

उपयोग करने के लिए सीखना Ctrl-Rऔर Ctrl-Sइतिहास में उन कमांड्स को आसानी से खोजने की अनुमति देता है, और आपको पहले से ही डुप्लिकेट को अनदेखा करने और बैश इतिहास फ़ाइल की साइट को बदलने के लिए HISTCONTROL पर्यावरण चर मिल गया।

मैं आमतौर पर कई मापदंडों का Ctrl-Rपालन करता हूं Ctrl-Eऔर कुछ मापदंडों को बदल देता हूं, अगर मैंने बचाव के लिए Ctrl-Rएक से कई बार मारकर एक पाया कमांड को छोड़ दिया Ctrl-S


2
अक्सर ट्टी को इस तरह से सेटअप किया जाता है कि Ctrl-S "स्टॉप" अनुक्रम है, और फॉरवर्ड खोज के लिए (सीधे) उपलब्ध नहीं है।
enzotib

ऐसे मामलों में फॉरवर्ड सर्च को <kbd> Ctrl-S </ kbd> के अलावा किसी अन्य चीज पर रीमेक किया जा सकता है।
एवगेनी


0

उपरोक्त अच्छे उत्तरों के अलावा, यदि आप केडी या सूक्ति के आधार पर एक gui का उपयोग करते हैं, तो AutoKey आश्चर्यजनक रूप से सहायक हो सकता है।

https://code.google.com/p/autokey/

यह आपको कुछ वाक्यांशों को टाइप करके या हॉटकी दबाकर ट्रिगर किए जाने वाले वाक्यांश बनाने की अनुमति देता है। ये वाक्यांश तब आपके इनपुट के लिए प्रतिस्थापित या जोड़े जाते हैं।

यह अजगर में लिखी गई लिपियों का भी समर्थन करता है, यदि आप अजगर को जानते हैं तो आप लगभग कुछ भी कर सकते हैं। मुझे अभी तक अजगर का पता नहीं है, लेकिन मुझे पहले से ही कुछ चीजें करने के लिए कुछ बहुत ही बुनियादी स्क्रिप्ट मिल रही हैं।

सब कुछ आपके कीबोर्ड से आता हुआ प्रतीत होता है, इसलिए यह किसी भी एप्लिकेशन के साथ काम करता है जो कीबोर्ड इनपुट को स्वीकार करता है - और आपके डेस्कटॉप के साथ ही।

यह नियंत्रित करने के बहुत सारे विकल्प हैं कि ये चीजें कैसे और कहां सक्रिय हो जाती हैं, इसलिए आपके पास कुछ ऐसे हो सकते हैं जो केवल आपके कंसोल में काम करते हैं और अन्य जो केवल दूसरी विंडो में काम करते हैं। आप स्ट्रिंग को टाइप करने के लिए वाक्यांशों को भी सेट कर सकते हैं जैसे ही आप उन्हें ट्रिगर करते हैं या जब तक आप उन्हें ओके नहीं देते तब तक प्रतीक्षा करें।


0

जैसे कि दूसरों ने कहा है कि आपका मित्र है। थोड़ी अधिक जटिल चीजों के लिए (जब आपको निर्देश के बीच कहीं तर्क की आवश्यकता होती है) मैं अपने .zshrc में कार्यों का उपयोग करता हूं, जैसे:

function ff() { find . -iname "*$**" }

यह पता लगाने जैसा काम करता है (मैं इसका उपयोग तब करता हूं जब किसी कारण से डीबी उपलब्ध नहीं होता है)। या

function chuck() { ps aux | grep $1 | tr -s '\t' ' ' | cut -f2 -d' ' | xargs kill $2 }

हत्यारे के विकल्प के लिए।


0

Cntl-Rवापस देखने के लिए उपयोग करने के लिए .bash_history, मेरे पास ~/developनिर्देशिका में एक README फ़ाइल भी है, जहां मैं git/ के लिए जैसे लंबे कमांड डालता हूं svn, इसलिए जब मुझे ज़रूरत हो, मैं बाद में उनके पास वापस आ सकता हूं। इसी तरह, मैं ~/install/READMEउन सभी सामान्य पैकेज नामों को रखने के लिए एक फाइल रखने की योजना बना रहा हूं, जिन्हें मैं आमतौर पर लिनक्स / उबंटू के नए संस्करण को स्थापित करने के बाद स्थापित करता हूं। इसलिए यह विचार है कि प्रत्येक डायरेक्टरी, जैसे वीडियो, ऑडियो, ... के अंदर एक README फाइल होनी चाहिए और उन्हें कॉमन कमांड / टिप्स में रखें, जो आपको बाद के समय में जानने की आवश्यकता हो सकती है।

हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.