আমি কিছু কমান্ড কার্যকর করতে চাই কিন্তু কমান্ডের ইতিহাসে সেগুলি সংরক্ষণ করতে চাই না। যাতে কেউ এটি .bash_history
ফাইলটিতে সন্ধান করতে সক্ষম না হয় ।
এইভাবে বাশ আদেশগুলি কার্যকর করতে কোনও উপায় আছে কি?
আমি কিছু কমান্ড কার্যকর করতে চাই কিন্তু কমান্ডের ইতিহাসে সেগুলি সংরক্ষণ করতে চাই না। যাতে কেউ এটি .bash_history
ফাইলটিতে সন্ধান করতে সক্ষম না হয় ।
এইভাবে বাশ আদেশগুলি কার্যকর করতে কোনও উপায় আছে কি?
উত্তর:
আপনার কমান্ডটি একটি স্থান দিয়ে শুরু করুন এবং এটি ইতিহাসে অন্তর্ভুক্ত হবে না।
সচেতন হোন যে এর জন্য পরিবেশের পরিবর্তনশীলটি $HISTCONTROL
সেট করা প্রয়োজন।
পরীক্ষা করে দেখুন যে নিম্নলিখিত কমান্ড আয় ignorespace
বা
ignoreboth
#> echo $HISTCONTROL
অনুপস্থিত থাকলে পরিবেশের পরিবর্তনশীল যুক্ত করতে, নীচের লাইনটি ব্যাশ প্রোফাইলে যুক্ত করা যেতে পারে। যেমন%HOME/.bashrc
export HISTCONTROL=ignorespace
প্রোফাইলে সোর্স করার পরে আবার স্পেস প্রিফিক্সড কমান্ডগুলিতে লেখা হবে না $HISTFILE
যে কোনও বাশ সেশনে ইতিহাস ফাইলটি / dev / নাল এ টাইপ করে সেট করুন:
export HISTFILE=/dev/null
দ্রষ্টব্য, মন্তব্যে উল্লেখ করা হিসাবে, এটি ইতিহাসে এই অধিবেশনটিতে কোনও আদেশ লিখবে না!
আপনার সিস্টেম প্রশাসকের কঠোর পরিশ্রমের সাথে কেবল বিচলিত হন না, দয়া করে;)
দুদাদের সমাধানটি আরও মার্জিত। কেবল পরিবর্তনশীলটি আনসেট করুন: unset HISTFILE
(ধন্যবাদ!)
/dev/null
জন্য লগআউটে 0600 নির্ধারিত অনুমতি সম্পর্কিত সমস্যা তৈরি করেছিল। পরিবর্তে আমি ব্যবহার unset HISTFILE
।
@ জন ডো এবং @ ব্যবহারকারী 3270492 এর উত্তরের একটি বর্ধন। তবে, এটি আমার পক্ষে কাজ করে বলে মনে হচ্ছে।
<your_secret_command>; history -d $((HISTCMD-1))
আপনার ইতিহাসে কমান্ডটি প্রবেশ করা উচিত নয়।
এখানে ব্যাখ্যাটি ..
'ইতিহাস-ডি' ইতিহাস থেকে উল্লিখিত এন্ট্রি মুছে দেয়।
এইচআইএসটিসিএমডি তার পরবর্তী কমান্ডের কমান্ড_নামার সংরক্ষণ করে। সুতরাং, (এইচআইএসটিসিএমডি -১) সর্বশেষ সম্পাদিত আদেশটি বোঝায়।
আপনি ইতিহাস ছাড়া শেল ব্যবহার বিবেচনা করতে পারেন, সম্ভবত
/bin/sh << END
your commands without history
END
(সম্ভবত /bin/dash
বা এর /bin/sash
চেয়ে বেশি উপযুক্ত হতে পারে /bin/sh
)
বা আরও ভাল ব্যাচ ইউটিলিটি ব্যবহার করুন যেমন
batch << EOB
your commands
EOB
ইতিহাস তখন ধারণ করবে sh
বা batch
যা খুব অর্থবহ নয়
আপনি আপনার অধিবেশন দিয়ে শুরু করতে পারেন
export HISTFILE=/dev/null ;history -d $(history 1)
তারপরে আপনার স্নিগ্ধ কৃতকর্মের সাথে এগিয়ে যান। হিস্টফাইলে সেট করা /dev/null
ইতিহাসের ফাইলে লগ করা হবে, তবুও এই এন্ট্রিটি সহজেই মুছে ফেলা হবে এবং কোনও চিহ্ন (কমপক্ষে ইতিহাসের ফাইলের মধ্যে) প্রদর্শিত হবে না।
এছাড়াও, এটি স্থায়ী নয়।
মন্তব্যে দুদাদ যেমন উল্লেখ করেছেন , এটি দুর্দান্তভাবে 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
তারপরে আপনি নিজের ইতিহাস সম্পাদনা করেছেন এবং সত্য যে আপনি এটি সম্পাদনা করেছেন!
unset HISTFILE; echo TEST; history
আপনাকে echo TEST
শেষ থেকে শেষ হিসাবে কমান্ড দেবে । যদিও অধিবেশনটি শেষ করে এবং আবার সংযুক্ত হওয়ার পরে, ইতিহাসের প্রকৃতপক্ষে এই প্রবেশ নেই। সুতরাং আমি বলব এটি কার্যকর হয় :)
unset HISTFILE
ইতিহাসে স্মৃতিতে রেকর্ড হওয়া কমান্ডগুলি থামানো বলে মনে হচ্ছে না, তবে এটি হিস্টফিল যে কোনও ফাইলেই রেকর্ড করা বন্ধ করে দেয়। সুতরাং আমি অনুমান করি যে এখনও আপনার স্থানীয় ইতিহাস স্মৃতিতে রয়েছে তবে এটি কোনও ফাইলে রেকর্ড করা হচ্ছে না, যা আপনি চাইবেন! ;)
আপনি নিম্নলিখিত কমান্ডটি ব্যবহার করতে পারেন:
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
$s
এবং সেডের অন্যান্য জিনিসগুলির পরিবর্তন হয়। function forget() { // put code here // }
আপনি 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."'
আপনি এটি অর্জন করার বিভিন্ন উপায় রয়েছে। এটি ইতিহাসের ফাইলের আকার 0 তে সেট করে:
export HISTFILESIZE=0
এটি ইতিহাস ফাইলটি সেট করে /dev/null
, কার্যকরভাবে এটি অক্ষম করে:
export HISTFILE=/dev/null
স্বতন্ত্র কমান্ডগুলির জন্য, আপনি একটি স্থান দিয়ে কমান্ডটির উপসর্গ করতে পারেন এবং এটি ইতিহাসের ফাইলে সংরক্ষণ করা হবে না। নোট করুন যে এর জন্য আপনার পরিবেশের পরিবর্তনশীল ( ignorespace
মান $HISTCONTROL
বাশ এবং ignorespace
আরও বিশদ অনুসন্ধানের জন্য ) অন্তর্ভুক্ত করা উচিত।
আপনার শুধু চালানো দরকার:
$ set +o history
আরও দেখতে, চালান:
$ man set
set -x history
পরে বিপরীত কমান্ড যুক্ত করব , এটি কাজ করে।