コマンドが履歴に追加されないようにする方法はありますか?


65

コマンドが履歴に追加されないようにする方法はありますか?履歴ファイルに保存したくないコマンドがあり、メモリに保存されている履歴を検索するときにそこに保存することはあまり気にしませんが、それは心配ではありません。これを防ぐ方法はありますか、または戻って履歴ファイルを編集する必要がありますか?

更新:これがシェル固有である可能性があることを知りませんでした。私のシェルはzsh。他のシェルについても回答してください。そうすれば、シェルでこれを行う方法がわかります。


回答:


52

ZSHの場合

最初にに挿入setopt HIST_IGNORE_SPACEします~/.zshrc。再びログインした後、履歴に保存したくないコマンドの前にを付けることができますspace

マニュアル、以下の3つのオプションは、特定の行がすべてで歴史に行くべきではないことを言うために使用することができます。

  • HIST_IGNORE_SPACEは、スペースで始まるコマンドを保存しません
  • HIST_NO_STORE履歴を保存しない(fc -l)コマンド
  • HIST_NO_FUNCTIONSは関数定義を保存しません

@mmckinst回答がzshで機能する可能性はありますか?またはそれのようなもの?またはコマンドを含むコマンド| somecommand
-xenoterracide

私の知る限り、zshにはbashのHISTIGNOREに相当するものはありません。
ドッグベイン

@xeno zshは、preexecそのために使用できるフック関数を提供します。ゼロ以外を返す場合、コマンドは履歴に保存されません。
キース

1
zshに一連の基本的な共通コマンドを無視させるために、それらのすべてにエイリアスを付けてスペースを前に置きます... for c(ls fg bg jobs exit clear reset); エイリアス$ c = "$ c"; 行って
ウィル・ノリス

4
:まだどのように行うのか分からない私のような怠け者将来の読者のためsetopt HIST_IGNORE_SPACEにある~/.zshrc
Al.G.

25

コマンドを何度も実行している場合は、シェルの履歴無視機能を使用することをお勧めします。sshへのsecret.server.comや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

fortuneで始まる行のみを無視するオプションはありますか。HISTIGNORE="^fortune*"無視するfortune -lが保持するようなものmyfortuneですか?
ベルンハルト

@xenoterracideありますが、パラメータの名前は異なります。答えに編集しました。
n.st

23

bashでは、HISTCONTROL変数を使用します。

HISTCONTROL=ignorespace(またはHISTCONTROL=ignoreboth)に設定します。これ以降、スペース行を開始すると、履歴には保存されません。これにより、一部の構成ファイルに非公開コマンドを含めることが回避されます。

そのような場合でも、スペースを追加するのを忘れてから戻りたいことがあります。歴史のエントリを削除するには、使用history -d <index>して、indexとされた数historyのコマンド(最初の列)。


1
これは動作しzshますか?
ゲルト

11

一回限りの最も簡単な方法は

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

where $は初期シェル$$のプロンプトを表し、サブシェルのプロンプトを表します。これはbashとzshで機能します。ksh HISTFILE=/notwritableでは代わりに必要です。重要なのはHISTFILE、コマンドが実行されるときではなく、履歴ファイルが書き込まれるときの値であることに注意してください。Bash、ksh、およびzshは、終了時に履歴ファイルに書き込みます(zshは構成に応じてより頻繁に実行できます)。

または、bashまたはzshを取得して、特定のパターンに一致する行を無視することができます(これは既に他の回答でカバーされています)。

zshの別の可能性は

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

fc -p現在の履歴リストをスタックにプッシュし、保存ファイルに関連付けられていない新しい履歴リストを開始します。fc -P未保存の履歴リストをスタックからポップし、それを完全に忘れます。

プロセスの実行中に、コマンドとその引数(および一部のシステムではその環境も)がプロセステーブル(ps出力)に表示されます。ルートは、システムアカウンティングデータベース内の過去のコマンドを表示でき、制御なしでさらにログを記録できます。また、実行したコマンド(ファイルの変更時間など)を大まかに示すことができる、あらゆる種類のフォレンジックエビデンスが存在する可能性があります。そのため、盗聴者に対するプライバシーを守ることはできません。

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.