क्या आपके इतिहास में शामिल होने से कमांड रखने का कोई तरीका है?


65

क्या आपके इतिहास में शामिल होने से कमांड रखने का कोई तरीका है? मेरे पास एक आदेश है जिसे मैं अपनी इतिहास फ़ाइल से बाहर रखना चाहता हूं, और जब मैं स्मृति में संग्रहीत इतिहास को खोजता हूं, तो मुझे इसकी परवाह नहीं है, हालांकि यह एक चिंता का विषय है। क्या इसे रोकने का कोई तरीका है, या क्या मुझे अभी वापस जाना है और अपनी इतिहास फ़ाइल को संपादित करना है।

अद्यतन: मुझे एहसास नहीं था कि यह शेल-विशिष्ट हो सकता है। मेरे खोल है zsh। आप अन्य गोले के लिए जवाब देने के लिए स्वागत कर रहे हैं ताकि लोग जानते हैं कि उनके खोल में यह कैसे करना है।


zsh जवाब देने के लिए क्रॉस-लिंकिंग: superuser.com/questions/352788/...
माइकल Shigorin

जवाबों:


52

ZSH में :

सबसे पहले setopt HIST_IGNORE_SPACEअपना डालें ~/.zshrc। अब आप फिर से लॉग इन करने के बाद, आप किसी भी कमांड को प्रीफ़िक्स कर सकते हैं, जिसे आप इतिहास में संग्रहीत नहीं करना चाहते हैं space

से उपयोगकर्ता के मैनुअल , निम्नलिखित 3 विकल्प कहने के लिए कुछ लाइनों के इतिहास में सब पर नहीं जाना चाहिए कि इस्तेमाल किया जा सकता:

  • HIST_IGNORE_SPACE एक स्थान के साथ उपसर्गों को संग्रहीत नहीं करता है
  • HIST_NO_STORE इतिहास ( fc -l ) कमांड को स्टोर नहीं करता है
  • HIST_NO_FUNCTIONS फ़ंक्शन परिभाषाओं को संग्रहीत नहीं करता है

किसी भी मौका @mmckinst जवाब zsh में काम करता है? या ऐसा कुछ? या शायद कोई भी कमांड जिसमें कमांड शामिल हो| somecommand
xenoterracide

AFAIK है, जोश में bash के HISTIGNORE के बराबर नहीं है।
डॉगबैन

@xeno zsh एक हुक फंक्शन प्रदान करता preexecहै जिसका उपयोग इसके लिए किया जा सकता है। यदि यह नॉन-जीरो रिटर्न करता है तो कमांड हिस्ट्री में सेव नहीं होता है।
कीथ

1
zsh को मूल सामान्य आदेशों के एक समूह को अनदेखा करने के लिए, मैंने उन सभी को सामने एक स्थान रखने के लिए उकसाया ... c (ls fg bg jobs exit clear reset) के लिए; उर्फ $ c = "$ c" करें; किया
नोरिस

4
मेरे जैसे आलसी भविष्य पाठकों कैसे अभी तक यह करने के लिए पता नहीं है, जो के लिए: setopt HIST_IGNORE_SPACEमें~/.zshrc
Al.G.

25

यदि आप कमांड को बार-बार चला रहे हैं, तो आप अपने शेल के इतिहास को अनदेखा करने की सुविधा का उपयोग करना चाह सकते हैं। मान लें कि आपके पास secret.server.com है, जिसे आप ssh, FTP फाइल्स आदि को भेजते हैं, जो आप ऐसी कोई भी लाइन नहीं चाहते हैं जिसमें secret.server.com का उल्लेख किया गया हो:

में bashआप स्थापित करेगा

HISTIGNORE="*secret.server.com*"

जबकि zshपैरामीटर में कहा जाता है

HISTORY_IGNORE="*secret.server.com*"

आप उन्हें अलग करने वाले बृहदान्त्र के साथ कई पैटर्न सूचीबद्ध कर सकते हैं। ध्यान दें कि प्रत्येक पैटर्न पूर्ण इनपुट लाइन के खिलाफ मेल खाता है , इसलिए आपको * शामिल करने की आवश्यकता हो सकती है। उदाहरण के लिए, निम्नलिखित को fortuneइतिहास से बाहर रखा जाएगा , लेकिन संग्रहीत करेगा fortune -l:

HISTIGNORE="*secret.server.com*:ytalk*:fortune"
HISTORY_IGNORE="*secret.server.com*:ytalk*:fortune"

HISTIGNORE सेट के साथ, आपके द्वारा सूचीबद्ध पैटर्न से मेल खाने वाला कुछ भी .bash_history/ .zsh_historyऔर यहां तक ​​कि अप एरो कुंजी भी सहेजा नहीं जाएगा , जो सामान्य रूप से आपके पिछले कमांड को याद करता है, अगर यह आपके पैटर्न से मेल नहीं खाता है।


3
किसी भी मौका यह zsh में काम करता है?
xenoterracide

क्या भाग्य के साथ शुरू होने वाली केवल लाइनों को अनदेखा करने का विकल्प है। कुछ HISTIGNORE="^fortune*"अनदेखा करना पसंद है fortune -lलेकिन रखना myfortune?
बर्नहार्ड

@xenoterracide यह करता है, लेकिन पैरामीटर को अलग नाम दिया गया है। मैंने इसे उत्तर में संपादित किया।
n

23

बैश में, HISTCONTROLचर का उपयोग करें ।

इसे HISTCONTROL=ignorespace(या HISTCONTROL=ignoreboth) पर सेट करें । अब से, जब आप किसी स्थान के साथ एक पंक्ति शुरू करते हैं, तो यह इतिहास में सहेजा नहीं जाएगा। यह कुछ कॉन्फ़िगरेशन फ़ाइल में नहीं-से-खुलासा-कमांड को शामिल करने से बचा जाता है।

यहां तक ​​कि ऐसा होता है कि यह अंतरिक्ष को जोड़ने के लिए भूल जाता है और फिर वापस जाना चाहता है। इतिहास में एक प्रविष्टि को हटाने के लिए history -d <index>, कमांड (पहला कॉलम) के indexसाथ मिली संख्या के साथ उपयोग करें history


1
क्या यह काम करता है zsh?
गर्ट

11

एक-बंद के लिए सबसे आसान तरीका है

$ $SHELL
$$ unset HISTFILE
$$ secret-command
$$ exit
$

जहां $प्रारंभिक शेल $$के संकेत का प्रतिनिधित्व करता है और उपखंड के संकेत का प्रतिनिधित्व करता है। यह बाश और zsh में काम करता है; ksh में आपको इसकी HISTFILE=/notwritableजगह चाहिए। ध्यान दें कि HISTFILEइतिहास फ़ाइल लिखे जाने पर क्या मायने रखता है , कमांड चलने पर नहीं। बैश, ksh और zsh इतिहास फ़ाइल में लिखते हैं जब वे बाहर निकलते हैं (zsh इसे अधिक बार कॉन्फ़िगरेशन के आधार पर कर सकते हैं)।

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

Zsh में एक और संभावना है

% fc -p
% secret-command
% fc -P

fc -pएक स्टैक पर वर्तमान इतिहास सूची को धकेलता है और एक नई शुरुआत करता है जो एक सेव फाइल से संबद्ध नहीं है। fc -Pचबूतरे पर बिना सहेजे इतिहास सूची पॉप और पूरी तरह से इसके बारे में भूल जाती है।

जबकि एक प्रक्रिया चल रही है, कमांड और उसके तर्क (और कुछ प्रणालियों पर इसका वातावरण भी) प्रक्रिया तालिका ( psआउटपुट) में दिखाई देगा। रूट सिस्टम अकाउंटिंग डेटाबेस में पिछले कमांड देख सकता है , और आपके नियंत्रण के बिना अधिक लॉगिंग कर सकता है। और संभवतः सभी प्रकार के फोरेंसिक सबूत होंगे जो मोटे तौर पर दिखा सकते हैं कि आप किस कमांड को चलाते हैं (जैसे कि फ़ाइल संशोधन समय)। तो आप निर्धारित बाज के खिलाफ गोपनीयता नहीं है।

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