मैं कैसे दोनों को bash स्क्रिप्ट के अंदर इतिहास का उपयोग और संशोधित कर सकता हूं?


0

इसलिए मेरे पास निम्नलिखित बैश स्क्रिप्ट है जिसे "किस्मत" के रूप में जाना जाता है:

#!/bin/bash -i
REPLY=;
history -w /tmp/fortunes_history_backup; # save history ...
history -c; # and clear it.
while [ ! \( "$REPLY" = "q" -o "$REPLY" = "quit" -o "$REPLY" = "exit" \) ];
do
    clear;
    if [ -n "$REPLY" ]; then
        history -s $REPLY; # store command in history
    fi
    (fortune -c $REPLY;) || (clear; fortune -c;)  # try to use the command as fortune file; 
                                                  # if that file can't be found, use a random one
#    echo `history -p !-1`;
    read -e;
done
history -r /tmp/fortunes_history_backup # restore history

प्रासंगिक हिस्सा है:

  • मैं इतिहास का बैकअप लेता हूं
  • तब मैंने इसे साफ कर दिया
  • फिर, हर बार जब उपयोगकर्ता किसी चीज में प्रवेश करता है, तो मैं इसे इतिहास में जोड़ता हूं
  • जब मैं समाप्त कर लेता हूं, तो मैं पुराने इतिहास को पुनर्स्थापित करता हूं।

अब मैं जो कुछ करना चाहता हूं वह यह है कि उपयोगकर्ता इस स्क्रिप्ट के अंदर तीर कुंजियों के साथ अपने इतिहास के माध्यम से सामान्य बैश की तरह नेविगेट कर सकता है।

history -p !-1(नवीनतम प्रविष्टि प्राप्त करें) history -w, history -cऔर history -rसभी उम्मीद के मुताबिक काम करते हैं; हालाँकि, जब स्क्रिप्ट चल रही है तो एरो कीज़ को दबाने से कुछ नहीं होता है।

(इससे पहले कि मेरे पास इतिहास का आदेश था, यह स्क्रिप्ट चलाने से पहले मेरे बैश इतिहास के माध्यम से चक्र होगा।)

क्या यह काम करने का कोई तरीका है?

(मुझे जो संदेह हो रहा है वह यह है कि बैश इतिहास को तब तक अपडेट नहीं करता है जब तक कि स्क्रिप्ट खत्म न हो जाए, जिसका अर्थ है कि कोई समाधान नहीं है ...)

जवाबों:


0

मैं इसे काम करने के लिए मिल गया

  • एक स्पष्ट इतिहास फ़ाइल बनाना
  • प्रत्येक इतिहास को उस फ़ाइल में कमांड करना, और फिर
  • हर बार उस कमांड से इतिहास को लोड करने पर एक कमांड जोड़ी गई:

(मार्कडाउन को ठीक करने के लिए खाली लाइन)

#!/bin/bash -i
REPLY=;
backupFile=/tmp/fortunes_history_backup;
tmpFile=/tmp/fortunes_history;
echo -n > $tmpFile; # clear the temporary history file
history -w $backupFile; # save history ...
history -c; # and clear it.

while [ ! \( "$REPLY" = "q" -o "$REPLY" = "quit" -o "$REPLY" = "exit" \) ];
do
    clear;
    if [ -n "$REPLY" ]; then
        echo $REPLY >> $tmpFile;
        history -r $tmpFile
        # history -s $REPLY does not work!
    fi
    (fortune -c $REPLY) || (clear; fortune -c;)  # try to use the command as fortune file; 
                                                 # if that file can't be found, use a random one
    read -e;
done
history -r $backupFile; # restore history

आवश्यक आदेश हैं echo $REPLY >> $tmpFile; history -r $tmpFile;

मैं अभी भी किसी भी स्पष्टीकरण के लिए आभारी हूं कि history -s $REPLY;काम क्यों नहीं करता (यह स्क्रिप्ट के बाहर करता है); यह लगभग एक बग की तरह लगता है, लेकिन एक ही समय में एक बग की खोज करने में bash( !) लगभग अभिमान की तरह लगता है: डी bash

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