बैश स्क्रिप्ट के अंदर चलने पर "इतिहास" काम करना बंद कर देता है


9

मैं एक विशेष स्ट्रिंग खोजने के लिए अपने बैश इतिहास को समझने के लिए एक सरल स्क्रिप्ट लिख रहा हूं। कमांड लाइन पर, मैं निम्नलिखित कार्य कर सकता हूं, जो ठीक काम करता है:

history | grep git

हालाँकि, जब मैं ऊपर के समान कमांड के साथ बैश स्क्रिप्ट बनाता हूं, तो अचानक historyकुछ भी नहीं लौटता है:

#!/bin/bash
history | grep git

जब मैं पहली पंक्ति को हटाता हूं #!/bin/bash, तो मेरी स्क्रिप्ट फिर से काम करती है। यहाँ क्या हो रहा है? मैं historyबैश स्क्रिप्ट के अंदर कैसे उपयोग कर सकता हूं ?

जवाबों:


8

निम्नलिखित के लिए है bash 4.0 or higher only, लेकिन यह चाल है। :)

#!/bin/bash -i
history | grep sometext

काम करता है! कोशिश करके देखो। ( -i= i nteractive, 3.x और उससे पहले का एक ध्वज उपलब्ध नहीं है)


दोस्त के लिए भी धन्यवाद जिसने हाल ही में मुझे सिर्फ इसलिए नीचा दिखाया क्योंकि वह ऐसा कर सकता है। (संभवतः एक bashv3 उपयोगकर्ता, मात्र निराशा से बाहर है, हाहा)। कम से कम मार्टिन के लिए मेरा समाधान बहुत मदद का था, जो कम से कम एक आराम था।
वाक्यविन्यास

मेरे पास एक ही सवाल था जब मैं एक टूल लिख रहा था जो 24/7 सपोर्ट इंजीनियरों के लिए ऑफिस-आवर्स के बाद काम करता है .. धन्यवाद!
हेनरी वैन मेगन

14

जब आप एक बैश शेल स्क्रिप्ट चलाते हैं, उदाहरण के लिए एक निष्पादन योग्य फ़ाइल को चलाने के लिए जिसकी शेबंग लाइन है #!/bin/bash, स्क्रिप्ट को एक गैर-संवादात्मक शेल में चलाया जाता है। एक गैर-इंटरैक्टिव शेल की विशेषताओं में से एक यह है कि इतिहास अक्षम है। इसलिए यदि आप चाहते हैं कि आपकी स्क्रिप्ट इतिहास का उपयोग करने में सक्षम हो, तो आपको ऐसा कुछ करने की आवश्यकता होगी:

#!/bin/bash
HISTFILE=~/.bash_history   # Or wherever you bash history file lives
set -o history             # enable history
history | grep git

बेशक, इस मामले में आप बस कर सकते हैं:

grep git ~/.bash_history

चूंकि उपरोक्त दोनों की आवश्यकता है कि इतिहास फ़ाइल ( ~/.bash_history) अद्यतित हो, जो कि लगभग निश्चित रूप से नहीं होगी।

मुझे यकीन नहीं है कि शेबिंग लाइन हटाए जाने के बाद आप अपनी स्क्रिप्ट कैसे चलाते हैं। फ़ाइल को सोर्स करना (जैसे, साथ .) स्क्रिप्ट को चलाने के समान नहीं है क्योंकि कमांड वर्तमान शेल में चलते हैं, जिसमें इतिहास सक्षम है।


यह history -aसुनिश्चित करने के लिए कि अंतिम कमांड को पहले फ़ाइल में संलग्न करने के लिए सेट कमांड के ठीक बाद क्या करना है?

4
@ illumin won't: मदद नहीं करेगा। स्क्रिप्ट को चलाने के लिए शुरू किया गया शेल पूरी तरह से अलग प्रक्रिया है; यह एक फ्रैश खाली इतिहास के साथ शुरू होता है।
रिची
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.