History コマンドは HISTFILE のすべての行を表示しません。

History コマンドは HISTFILE のすべての行を表示しません。

このコマンドを使用すると、cat -n $(echo $HISTFILE) | grep -v "#"4000行を超えます。 (grepはhistfileに追加されたタイムスタンプを省略します)

1 pwd
...
2017 cd ~
...
4033 git push

ただし、このコマンドを使用すると、history2000を超える行のみが表示されます。

1 18/09/19 11:00:38 cd ~
...
2017 30/10/19 09:41:50 git push

私の履歴コマンドで行の半分が省略されたのはなぜですか?

$HISTFILEタイムスタンプが原因であると疑われます。しかし、この動作をどのように回避できますか?それとも疑いが間違っていますか?

envコマンドで使用される変数をhistory次のように変更しました。

export HISTFILESIZE=
export HISTSIZE=
export HISTFILE=~/.bash_eternal_history
export HISTTIMEFORMAT="%d/%m/%y %T "

無制限の記録と追加のタイムスタンプが必要なので、これらの修正を行いました。私はこれを維持して記録コマンドを出力したいと思いますHISTFILE

使っていますオペレーティングシステム cat /etc/*release:

DISTRIB_ID=Ubuntu
DISTRIB_RELEASE=18.04
DISTRIB_CODENAME=bionic
DISTRIB_DESCRIPTION="Ubuntu 18.04.3 LTS"
NAME="Ubuntu"
VERSION="18.04.3 LTS (Bionic Beaver)"
ID=ubuntu
ID_LIKE=debian
PRETTY_NAME="Ubuntu 18.04.3 LTS"
VERSION_ID="18.04"
HOME_URL="https://www.ubuntu.com/"
SUPPORT_URL="https://help.ubuntu.com/"
BUG_REPORT_URL="https://bugs.launchpad.net/ubuntu/"
PRIVACY_POLICY_URL="https://www.ubuntu.com/legal/terms-and-policies/privacy-policy"
VERSION_CODENAME=bionic
UBUNTU_CODENAME=bionic

ベストアンサー1

Historyコマンドは現在のbashセッションの履歴のみを一覧表示しますが、このファイルにはすべてのbashセッションの履歴が含まれています。したがって、セッションの実行履歴には、ファイルより少ない結果が表示される可能性が高くなります。また、履歴は「最近の」コマンドを見つけるために使用されるため、$ HISTSIZEに基づいて長さが制限されます(ユーザー環境でHISTSIZEを増やすには、以下を参照してください)。この議論)。

履歴ファイル内のすべての最新コマンドを含むように特定のセッションの履歴を更新するには、-rまたは-nを使用して履歴を実行します。マニュアルページから:

-n:履歴ファイルから未読の履歴行を現在の履歴リストに読み込みます。これは、現在のbashセッションが開始されてから履歴ファイルに追加された行です。

-r:履歴ファイルの内容を読み取り、それを現在の履歴リストに追加します。 ):

user@machine:~> history
994  ssh server
995  history --help
996  man history
997  history

997行だけが返されました。

user@machine:~> history -r

更新する...

user@machine:~> history

994  ssh server
995  history --help
996  man history
997  history
998  history -r
999  ping 10.10.10.10
1000  ping 10.10.10.1
...
1992  ssh server02
1993  history

これで1993のコマンドが一覧表示されます。したがって、オープンして使用する他の端末から追加された履歴を含めると、元のファイル($ HISTFILESIZEに制限されている)を読み取るのと同様の出力(末尾の$ HISTSIZE行)が表示されます。微妙な違いに注意してください... -nは現在のbashセッションラインを読み取り、-rはファイル全体を読み取ります。

おすすめ記事