बैश इतिहास की एक श्रृंखला देखें


30

historyसब बाहर आदेश सूचियों वर्तमान सत्र के लिए इतिहास। पसंद:

1 ls 
2 cd /root
3 mkdir something
4 cd something
5 touch afile
6 ls
7 cd ..
8 rm something/afile
9 cd ..
10 ls
11 history

रुचि के आइटम खोजने के लिए, मैं पसंद के historyसाथ पाइप कर सकता हूंgrep

history | grep ls
1 ls
6 ls
10 ls

मैं अंतिम 3 कमांड भी देख सकता हूं जैसे:

history 3
11 history
12 history | grep ls
13 history 3

लेकिन मैं इतिहास की एक विशिष्ट श्रेणी कैसे प्राप्त करूं? उदाहरण के लिए कुछ इस तरह:

history range 4 7
4 cd something
5 touch afile
6 ls
7 cd ..

आप अंतिम xकमांड को तब पाइप कर सकते हैं head
ब्राचली

@ ब्रेचली: इसके लिए मुझे यह जानना होगा कि जाने के लिए कितने अंतिम आदेश हैं। इस पर विचार करें, मेरे history | grep somethingशो 123 234 345इतिहास में गिने गए आदेशों के परिणाम हैं और मुझे अंतिम कमांड की संख्या ज्ञात नहीं हो सकती है ( historyइस मामले में)। मेरी अंतिम कमांड 400, 500 या जो भी हो सकती है। इसलिए पहले मुझे उस नंबर को जांचना होगा, अंतर का पता लगाना होगा, अंतिम xकमांड को सूचीबद्ध करना होगा और फिर पाइप को करना होगाhead
Slartibartfast

जवाबों:


52

इसके बजाय history, आप उपयोग कर सकते हैं fc, जो आपको सीमा का चयन करने की अनुमति देता है:

fc -l 4 7

4
यह भी नकारात्मक संख्या को अंत से गिनना स्वीकार करता है, जैसे fc -l -16 -10
फ्रैंकलिन यू

हम्म, आश्चर्य है कि हमें वास्तविक आदेश के लिए सिर्फ तर्कों के बजाय एक पूरी नई कमान की आवश्यकता क्यों है ...
रिंगो

10

यदि आपको इतिहास कमांड का उपयोग करना है , तो इसे sed या awk के माध्यम से पाइप करें:

history | sed -n '10,20p'

history | awk 'NR >= 10 && NR <= 20'

अन्यथा क्यूंग्लम का जवाब बेहतर विकल्प है।


6
चूंकि हम बुरे विकल्पों में हैं, इस संयोजन से headऔर tailभी कम सुरुचिपूर्ण तरीके से इस समस्या का समाधान होगा। 10-> 25 की सीमा के लिए आपको उपयोग करना होगा history | head 25 | tail 15
हारून

1

कमांड के चारों ओर लाइन नंबरों पर एक grep के साथ इतिहास का उपयोग करते हुए मैं अपने लिए सबसे अच्छा काम कर रहा हूं।

उदाहरण के लिए, मैं देख रहा हूँ कि मैंने क्या किया है ping mybox, कम या ज्यादा 20 लाइनें।

$ history | grep "ping mybox" 20325 ping mybox

यह लाइन है 20325इसलिए मुझे बस [20320..20339]रेंज में एक नंबर से शुरू होने वाली लाइनों को पकड़ना है ।

$ history | grep ^203[2-3][0-9]


(1) आप कहते हैं "अधिक या कम 20", लेकिन आपका उदाहरण +5 और +14 दिखाता है। (2) यह मेरे लिए काम नहीं करता है, क्योंकि इतिहास की संख्या में प्रमुख स्थान हैं।
स्कॉट
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.