ইতিহাসে না রেখে কমান্ড কার্যকর করুন [বন্ধ]


203

আমি কিছু কমান্ড কার্যকর করতে চাই কিন্তু কমান্ডের ইতিহাসে সেগুলি সংরক্ষণ করতে চাই না। যাতে কেউ এটি .bash_historyফাইলটিতে সন্ধান করতে সক্ষম না হয় ।

এইভাবে বাশ আদেশগুলি কার্যকর করতে কোনও উপায় আছে কি?


13
এই প্রশ্নটি সম্ভবত সার্ভারফল্টে সরিয়ে নেওয়া উচিত কারণ এটি "সার্ভার অ্যাডমিন" যতটা "প্রোগ্রামিং" নয় - তবে প্রশ্ন / উত্তরের জন্য ধন্যবাদ, আমার ঠিক কী প্রয়োজন!
অ্যান্ড্রু থেকেন

উত্তর:


294

আপনার কমান্ডটি একটি স্থান দিয়ে শুরু করুন এবং এটি ইতিহাসে অন্তর্ভুক্ত হবে না।

সচেতন হোন যে এর জন্য পরিবেশের পরিবর্তনশীলটি $HISTCONTROLসেট করা প্রয়োজন।

  • পরীক্ষা করে দেখুন যে নিম্নলিখিত কমান্ড আয় ignorespaceবা ignoreboth

    #> echo $HISTCONTROL
  • অনুপস্থিত থাকলে পরিবেশের পরিবর্তনশীল যুক্ত করতে, নীচের লাইনটি ব্যাশ প্রোফাইলে যুক্ত করা যেতে পারে। যেমন%HOME/.bashrc

    export HISTCONTROL=ignorespace

প্রোফাইলে সোর্স করার পরে আবার স্পেস প্রিফিক্সড কমান্ডগুলিতে লেখা হবে না $HISTFILE


20
Ignore HISTCONTROL এ উপেক্ষা স্পেস অন্তর্ভুক্ত না করা হলে এটি কাজ করে না - যদিও এটি সম্ভবত বেশিরভাগ সিস্টেমে ডিফল্ট।
pgl

2
সঠিক। আরও তথ্যের জন্য ওপ-এর ব্যাশ ম্যান পৃষ্ঠাতে HISTCONTROL এবং HISTIGNORE এ নজর দেওয়া উচিত।
u-punkt

2
thegeekstuff.com/2008/08/… - ইতিহাস থেকে আদেশগুলি আড়াল করার এই পদ্ধতি সহ আরও বাশ ইতিহাসের টিপস এখানে পাওয়া যায়
ব্যবহারকারী 379997

52

যে কোনও বাশ সেশনে ইতিহাস ফাইলটি / dev / নাল এ টাইপ করে সেট করুন:

export HISTFILE=/dev/null

দ্রষ্টব্য, মন্তব্যে উল্লেখ করা হিসাবে, এটি ইতিহাসে এই অধিবেশনটিতে কোনও আদেশ লিখবে না!

আপনার সিস্টেম প্রশাসকের কঠোর পরিশ্রমের সাথে কেবল বিচলিত হন না, দয়া করে;)

দুদাদের সমাধানটি আরও মার্জিত। কেবল পরিবর্তনশীলটি আনসেট করুন: unset HISTFILE(ধন্যবাদ!)


5
এটি সমস্ত কমান্ড লগ হতে বাধা দেবে । এটি প্রশ্নকারী যা চান তা নয়।
নওফাল ইব্রাহিম

12
এটি আমার /dev/nullজন্য লগআউটে 0600 নির্ধারিত অনুমতি সম্পর্কিত সমস্যা তৈরি করেছিল। পরিবর্তে আমি ব্যবহার unset HISTFILE
দুদাদ


21

@ জন ডো এবং @ ব্যবহারকারী 3270492 এর উত্তরের একটি বর্ধন। তবে, এটি আমার পক্ষে কাজ করে বলে মনে হচ্ছে।

<your_secret_command>; history -d $((HISTCMD-1))

আপনার ইতিহাসে কমান্ডটি প্রবেশ করা উচিত নয়।

এখানে ব্যাখ্যাটি ..

'ইতিহাস-ডি' ইতিহাস থেকে উল্লিখিত এন্ট্রি মুছে দেয়।

এইচআইএসটিসিএমডি তার পরবর্তী কমান্ডের কমান্ড_নামার সংরক্ষণ করে। সুতরাং, (এইচআইএসটিসিএমডি -১) সর্বশেষ সম্পাদিত আদেশটি বোঝায়।

বাশ ইতিহাস ফাইল থেকে একটি নির্দিষ্ট লাইন সরান


দুর্ভাগ্যক্রমে এটি আমার পক্ষে কার্যকর হয়নি।
ম্যাগিক

10

আপনি ইতিহাস ছাড়া শেল ব্যবহার বিবেচনা করতে পারেন, সম্ভবত

/bin/sh << END
   your commands without history
END

(সম্ভবত /bin/dashবা এর /bin/sashচেয়ে বেশি উপযুক্ত হতে পারে /bin/sh)

বা আরও ভাল ব্যাচ ইউটিলিটি ব্যবহার করুন যেমন

batch << EOB
   your commands
EOB

ইতিহাস তখন ধারণ করবে shবা batchযা খুব অর্থবহ নয়


8

আপনি আপনার অধিবেশন দিয়ে শুরু করতে পারেন

export HISTFILE=/dev/null ;history -d $(history 1)

তারপরে আপনার স্নিগ্ধ কৃতকর্মের সাথে এগিয়ে যান। হিস্টফাইলে সেট করা /dev/nullইতিহাসের ফাইলে লগ করা হবে, তবুও এই এন্ট্রিটি সহজেই মুছে ফেলা হবে এবং কোনও চিহ্ন (কমপক্ষে ইতিহাসের ফাইলের মধ্যে) প্রদর্শিত হবে না।

এছাড়াও, এটি স্থায়ী নয়।


এটি ইতিমধ্যে অনেক বার উত্তর ছিল। আপনি কী বলবেন আপনার উত্তর এই থ্রেডে যুক্ত করে (অকেজো শব্দ ছাড়া)?
gniourf_gniourf

এটি একটি জবাবের সাথে একত্রে রাখা হয়নি , যাতে ইতিহাসে কমান্ডটি নিজেরাই প্রদর্শিত না হয় এবং এরপরে প্রবেশ করা কিছু প্রদর্শন না করে।
খ্রিস্টান

1
তবে এখন এই থ্রেডটি আসল জগাখিচুড়ি! এই ক্ষেত্রে, বিশেষত এইরকম একটি পুরানো প্রশ্নের জন্য, আমি বিশ্বাস করি যে আপনি ইতিমধ্যে বিদ্যমান ভাল উত্তরগুলি সম্পাদনা করুন, এবং / অথবা একটি মন্তব্য রেখে দিন ...
gniourf_gniourf

5

মন্তব্যে দুদাদ যেমন উল্লেখ করেছেন , এটি দুর্দান্তভাবে unset HISTFILEকরে তবে আপনি কিছু ইতিহাসও মুছতে চান, echo $HISTFILEইতিহাসের ফাইলের অবস্থান (সাধারণত ~/.bash_history) unset HISTFILE, এবং সম্পাদনা করুন ~/.bash_history(বা যা কিছু HISTFILEছিল - অবশ্যই এটি এখন unsetতাই আপনি করতে পারেন ' টি এটি পড়ুন)।

$ echo $HISTFILE       # E.g. ~/.bash_history
$ unset HISTFILE
$ vi ~/.bash_history   # Or your preferred editor

তারপরে আপনি নিজের ইতিহাস সম্পাদনা করেছেন এবং সত্য যে আপনি এটি সম্পাদনা করেছেন!


এটি চেষ্টা করে: জিএনইউ ব্যাশ, সংস্করণ 3.2.57 (1) -রেলিজ (x86_64-আপেল-ডারউইন 15) এবং এটি কার্যকর হয় না। কমান্ড আমি সেট না ইতিহাস পরে ব্যবহার ~ / .bash_history মধ্যে সংরক্ষিত হয়
Krystian

@ ক্রিশ্চিয়ান আমার ভুল - আমি "হিস্টোরিটি হিস্টোরি" লিখেছিলাম যখন এটি "সংস্থাপিত হিস্টফিল" হওয়া উচিত - সংশোধন করা হয়েছিল। এটা কি এখন কাজ করে? এটি জিএনইউ ব্যাশ, সংস্করণ 4.3.30 (1) -রিলেজ (x86_64-pc-linux-gnu) এ কাজ করে।
drkvogel

আমি নিশ্চিত নই সাধারণ পরীক্ষা: unset HISTFILE; echo TEST; historyআপনাকে echo TESTশেষ থেকে শেষ হিসাবে কমান্ড দেবে । যদিও অধিবেশনটি শেষ করে এবং আবার সংযুক্ত হওয়ার পরে, ইতিহাসের প্রকৃতপক্ষে এই প্রবেশ নেই। সুতরাং আমি বলব এটি কার্যকর হয় :)
ক্রিশ্চিয়ান

unset HISTFILEইতিহাসে স্মৃতিতে রেকর্ড হওয়া কমান্ডগুলি থামানো বলে মনে হচ্ছে না, তবে এটি হিস্টফিল যে কোনও ফাইলেই রেকর্ড করা বন্ধ করে দেয়। সুতরাং আমি অনুমান করি যে এখনও আপনার স্থানীয় ইতিহাস স্মৃতিতে রয়েছে তবে এটি কোনও ফাইলে রেকর্ড করা হচ্ছে না, যা আপনি চাইবেন! ;)
drkvogel

4

আপনি নিম্নলিখিত কমান্ডটি ব্যবহার করতে পারেন:

echo toto; history -d $(history | sed -n '$s/\s*\([0-9]*\)\s*.*$/\1/p')

আমি মনে করি এটি খুব বহনযোগ্য কমান্ড


আমি alias forget="history -d $(history | sed -n '$s/\s*\([0-9]*\)\s*.*$/\1/p')"এটির কাছ থেকে উপন্যাস তৈরি করেছি: এবং এখন আপনি এটির মতো কিছু করতে পারেন:mysql -uroot -pSecretPassword ; forget
sobi3ch

1
দুঃখিত, তবে আমি বুঝতে পেরেছি যে উক্তিটির পরিবর্তে আপনার উক্তির পরিবর্তে ফাংশন তৈরি করতে হবে কারণ উদ্ধৃতি চিহ্নগুলির অর্থ $sএবং সেডের অন্যান্য জিনিসগুলির পরিবর্তন হয়। function forget() { // put code here // }
sobi3ch

3

আপনি zsh ব্যবহার করে চালাতে পারেন:

setopt histignorespace

এটি সেট হওয়ার পরে, একটি স্পেস দিয়ে শুরু হওয়া প্রতিটি কমান্ড ইতিহাস থেকে বাদ থাকবে।

আপনি ব্যবহার করতে পারেন alias লেখা মধ্যে .zshrcএই মোড় বন্ধ / উপর :

# Toggle ignore-space. Useful when entering passwords.
alias history-ignore-space-on='\
setopt hist_ignore_space;\
echo "Commands starting with space are now EXCLUDED from history."'

alias history-ignore-space-off='\
unsetopt hist_ignore_space;\
echo "Commands starting with space are now ADDED to history."'

দুর্দান্ত, তবে এই প্রশ্নটি বিশেষত ট্যাগ করা হয়েছে বাশ
ট্রিপলি

2

আপনি এটি অর্জন করার বিভিন্ন উপায় রয়েছে। এটি ইতিহাসের ফাইলের আকার 0 তে সেট করে:

export HISTFILESIZE=0

এটি ইতিহাস ফাইলটি সেট করে /dev/null, কার্যকরভাবে এটি অক্ষম করে:

export HISTFILE=/dev/null

স্বতন্ত্র কমান্ডগুলির জন্য, আপনি একটি স্থান দিয়ে কমান্ডটির উপসর্গ করতে পারেন এবং এটি ইতিহাসের ফাইলে সংরক্ষণ করা হবে না। নোট করুন যে এর জন্য আপনার পরিবেশের পরিবর্তনশীল ( ignorespaceমান $HISTCONTROLবাশ এবং ignorespaceআরও বিশদ অনুসন্ধানের জন্য ) অন্তর্ভুক্ত করা উচিত।


2
এটি সমস্ত কমান্ড লগ হতে বাধা দেবে । এটি প্রশ্নকারী যা চান তা নয়।
নওফাল ইব্রাহিম

ঠিক আছে, আমি একধরনের ধারণা নিয়েছিলাম যে প্রশ্নকারী যা চান তা লগ করা উচিত না করে যা করার পরে মানগুলি পুনরায় সেট করে দেবে।
pgl

1

আপনি সমস্ত ইতিহাস মুছে ফেলার বিষয়টি সহ আপনি যদি সমস্ত ইতিহাস মুছতে চান তবে এটি সুবিধাজনক!

rm .bash_history;export HISTFILE=/dev/null;exit

0

আপনার শুধু চালানো দরকার:
$ set +o history

আরও দেখতে, চালান:
$ man set


2
এটি ভবিষ্যতের সমস্ত কমান্ডের জন্য ইতিহাসকে অক্ষম করে, কোনও পৃথক কমান্ডের জন্য নয়। এখানে আসা বেশিরভাগ লোকদের পরিবর্তে গৃহীত উত্তরটি দেখতে হবে।
ট্রিপলি

এটি বৈধ, বা ঠিক আছে তবে অসম্পূর্ণ। যতক্ষণ আমরা set -x historyপরে বিপরীত কমান্ড যুক্ত করব , এটি কাজ করে।
আবদুল্লাহ

0

এই আদেশ কার্যকর হতে পারে। এটি কার্যকর করা কমান্ডটি রেকর্ড করবে না

history -d $((HISTCMD-1)) && <Your Command Here>
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.