ここに奇妙なことがあります。私はbash履歴にアクセスする必要があるプログラムを書いています。私は解析を見ました.bash_history
(.bash_eternal_history
または私の設定history
)ファイルが見つかりましたが、すでに組み込まれている機能で重い作業が行われたことに気づきました。
マイ履歴ファイルの一部が下に表示されます。直接解析することもできますが、history
すでにエッジケースの複数行コマンド、タイムスタンプ、histfile形式を処理し、複数のプラットフォームで動作するため、標準化されたパーサーに依存することをお勧めします。
#1587920724
echo test
#1587920725
echo test2
#1587920729
touch file
#1587920731
rm file
#1587920732
history
コマンドを入力すると、次history
のクールなタイムスタンプ履歴のリストが表示されます。
5083 [2020-04-26 18:05:24] echo test
5084 [2020-04-26 18:05:25] echo test2
5085 [2020-04-26 18:05:29] touch file
5086 [2020-04-26 18:05:31] rm file
5087 [2020-04-26 18:05:32] history
history
シェルは組み込みコマンドなので、プログラムのbashコマンド文字列を介して実行する必要があります。ただし、コマンドを実行すると、bash -ic 'history -r; history'
次のメッセージが表示されます。
10159 [2020-04-26 18:08:35] #1587920724
10160 [2020-04-26 18:08:35] echo test
10161 [2020-04-26 18:08:35] #1587920725
10162 [2020-04-26 18:08:35] echo test2
10163 [2020-04-26 18:08:35] #1587920729
10164 [2020-04-26 18:08:35] touch file
10165 [2020-04-26 18:08:35] #1587920731
10166 [2020-04-26 18:08:35] rm file
10167 [2020-04-26 18:08:35] #1587920732
10168 [2020-04-26 18:08:35] history
コメントのタイムスタンプはコマンドと同じように印刷され、すべての項目に同じタイムスタンプ(コマンドを実行した時間)があります。
奇妙なことに、Linuxでは、bash -ic 'history -r; history'
まったく同じ出力がhistory
通常の形式と正しいタイムスタンプを使用して生成されます。これはまさに私が予想したものと同じです。
私は知りたいと思います:
- これら2つのコマンドの出力はMacOSでは異なりますが、Linuxでは同じ理由は何ですか?
- コマンド文字列から正しい出力を取得するにはどうすればよいですか? (Pythonスクリプトでコマンドを実行しています)
- 私は間違った方向に行っているのだろうか?私の最初の目標は、(
history > history.txt && ./script.py
または同じ外部タスクを実行する必要なしに)Pythonプログラムから完全なタイムスタンプを持つbashレコードを取得することでしたhistory | ./script.py
。
ありがとうございます:)
追加情報
- MacOS バージョン:
10.14.6 Mojave
- MacOS リリース版:
3.2.57
- 歴史的構成:時代を超えたカーニバルの歴史
- Linuxバージョン:
Linux Mint 19.2
- Linuxバッシュバージョン:
4.4.20
答え1
この問題を確認できます。
はい、bash バージョン 3.2.57 以前では、履歴ファイルのタイムスタンプが認識されないため、問題があるようです。 bash 変更ファイルに特定の変更が見つかりません。 Bashを最新バージョン(4+)にアップグレードする必要があるかもしれません。