इतिहास में कमांड रखने से बचें


33

मैं बैश का उपयोग करता हूं और मैं इतिहास में रखी जाने वाली कुछ आज्ञाओं से बचना चाहूंगा।

  • क्या केवल अगले आदेश के लिए ऐसा करना संभव है?
  • क्या पूरे सत्र के लिए ऐसा करना संभव है?

ध्यान दें कि यदि लक्ष्य कमांड लाइन के तर्कों में पासवर्ड छिपाने के लिए है, तो वे अभी भी ps के माध्यम से दिखाई देंगे
बेनिटोक

जवाबों:


36

और मुझे एक और उत्तर याद आया, यह आपके प्रश्न का वास्तविक उत्तर है।

यदि आपके पास HISTCONTROL में "इग्नोरस्पेस" है, तो किसी भी वर्ण को अंतरिक्ष वर्ण से शुरू करने की याद नहीं है। यह वर्तमान शेल के इतिहास में भी दिखाई नहीं देगा, अकेले $ HISTFILE को बचाया जाए।

उदाहरण के लिए मैंने अपने ~ / .bashrc में HISTCONTROL = 'ignboth: erasedups' का निर्यात किया है

यहाँ बैश मैन पेज से विवरण है:

HISTCONTROL
  आदेशों को नियंत्रित करने वाले मूल्यों की एक बृहदान्त्र-पृथक सूची
  इतिहास सूची में सहेजा गया। यदि मूल्यों की सूची में शामिल हैं
  इग्नोरस्पेस, वे रेखाएँ जो एक अंतरिक्ष वर्ण से शुरू होती हैं
  इतिहास सूची में सहेजा गया। अनदेखा किए गए मान का एक कारण लाइनों है
  सहेजे नहीं जाने के लिए पिछले इतिहास प्रविष्टि का मिलान। का एक मूल्य
  इग्नोरबॉथ इग्नोरस्पेस और इग्नोरडअप के लिए शॉर्टहैंड है। एक कीमत
  मिटाएँ के कारण वर्तमान लाइन से मेल खाते सभी पिछले लाइनों का कारण बनता है
  उस पंक्ति को सहेजे जाने से पहले इतिहास सूची से हटा दिया जाए।
  उपरोक्त सूची में किसी भी मूल्य को अनदेखा नहीं किया गया है। यदि HISTCONTROL है
  परेशान, या एक मान्य मान शामिल नहीं है, सभी लाइनों द्वारा पढ़ा जाता है
  शेल पार्सर मूल्य के अधीन इतिहास सूची में सहेजे जाते हैं
  इतिहास का। एक बहु-पंक्ति की दूसरी और बाद की लाइनें
  यौगिक कमांड का परीक्षण नहीं किया जाता है, और इसे इतिहास में जोड़ा जाता है
  HISTCONTROL के मूल्य की परवाह किए बिना।

1
अंतरिक्ष चाल के लिए +1:
पेट्रस

19

यहाँ कुछ इतिहास के सबक हैं जिन्हें मैंने गुगली से सीखा है:

आप कुछ तारों को अनदेखा करने के लिए इतिहास सेट कर सकते हैं। इस उदाहरण में, मैंने कमांड ls, पासवार्ड और कैरेक्टर स्पेस द्वारा उपसर्ग किए गए किसी भी कमांड को अनदेखा कर दिया है।

निर्यात HISTIGNORE = "ls: passwd:"

अपने सत्र के लिए इतिहास को अक्षम करने के लिए आप जारी कर सकते हैं:

निर्यात HISTSIZE = 0

संदर्भ


7

यदि आप इतिहास से अंतिम कमांड को निकालना चाहते हैं, तो आप हिट कर सकते हैं Up-arrow, इसके बाद Ctrl - U(लाइन की शुरुआत में मिटा सकते हैं), फिर Up-arrowसे।

आप इस तरह से किसी भी व्यक्तिगत लाइन को इतिहास से मिटा सकते हैं। बस ऊपर-तीर या खोज का उपयोग करें या जो भी इसे बनाने के लिए वर्तमान कमांड लाइन संपादित की जा रही है, उसे दबाएं Ctrl - U, और फिर Up-arrowया Down-arrowकिसी अन्य इतिहास लाइन पर जाने के लिए।

मुझे एक दिन पहले दुर्घटना से यह पता चला। मुझे नहीं पता कि यह दस्तावेज है या नहीं।

आम तौर पर, हालांकि, यह मौजूदा शेल के इतिहास को पूरी तरह से बचाने के लिए कम परेशानी नहीं है:

HISTFILE=/dev/null

3

आप HISTFILEवेरिएबल को अनसेट कर सकते हैं । से man bash:

  HISTFILE
         फाइल का नाम जिसमें कमांड हिस्ट्री सेव है (देखें HIS-
         नीचे टोरी)। डिफ़ॉल्ट मान ~ / .bash_history है। अगर परेशान है,
         इंटरेक्टिव शेल होने पर कमांड हिस्ट्री सेव नहीं होती है
         बाहर निकलता है।

मुझे नहीं लगता कि शेल के बाहर निकलने से पहले यह कमांड को स्थानीय शेल इतिहास में दिखाई देने से रोकता है।



1

मैं देख रहा हूं कि किसी ने भी यह तरीका नहीं लिखा है, इसलिए मैं करूंगा।

history -d $((HISTCMD-1)) && history -d <command or number of command>

history -d इतिहास से उल्लिखित प्रविष्टि को हटाता है।

HISTCMDअगले आदेश को निष्पादित करने के लिए कमांड का कमांड_नंबर स्टोर करता है। तो, (HISTCMD-1) अंतिम निष्पादित कमांड को संदर्भित करता है।

मैंने एक शॉर्ट बैश फिल्म की, जिसमें दिखाया गया है कि यह कैसे काम करती है: https://asciinema.org/a/dtxpuovhty0obhln50soqypt2

कमांड चलाने के बाद और क्योंकि यह कमांड को भी हटा देता है, तो तीर के साथ ऊपर जाने से कमांड प्रदर्शित नहीं होगी, इसलिए यदि आप अक्सर उस का उपयोग करने की योजना बनाते हैं, तो एक उपनाम बनाना सबसे अच्छा होगा:

alias hc='history -d $((HISTCMD-1)) && history -d $1'

तो आप कर सकते हैं:

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