
このコマンドを使用すると、cat -n $(echo $HISTFILE) | grep -v "#"
4000行を超えます。 (grepはhistfileに追加されたタイムスタンプを省略します)
1 pwd
...
2017 cd ~
...
4033 git push
ただし、このコマンドを使用すると、history
2000を超える行のみが表示されます。
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はファイル全体を読み取ります。