web-dev-qa-db-ja.com

sshのhistoryコマンドの出力が正しくありません。タイムスタンプ情報を正しく読み取る方法

タイムスタンプ情報.bash_historyファイルを格納するためにHISTTIMEFORMAT変数を設定しました。インタラクティブシェルを使用すると、履歴を正しく表示できます。

しかし、履歴コマンドを実行して履歴を表示すると、.bash_historyファイルのタイムスタンプ情報がコマンドとして表示され、すべてのコマンドのタイムスタンプ情報が現在の時刻に設定されます。

ファイルの内容の例:bash_history

#45556656
pwd
#45677756
ls
#45665765
who

コマンド:

$ ssh Host 'HISTFILE=~/bash_history;HISTTIMEFORMAT=" %F %T ";set -o history; history'

出力:

235 2015-08-24 13:12 #45556656
236 2015-08-24 13:12 pwd
237 2015-08-24 13:12 #45677756
238 2015-08-24 13:12 ls

問題:1。タイムスタンプはすべてのコマンドで同じです。現在のタイムスタンプに設定されます。

履歴ファイルの時刻情報をコマンドとして読み込みます。そのため、コマンドの実際のタイムスタンプ情報が失われました。 sshまたはcronjobから情報を取得しようとしたときに正しい情報を取得する方法。

:私は同様の質問を見ましたが、私の問題を解決するものはなく、質問をした人もシナリオを詳しく説明していません。

4
Rajasekhar

また、histexpandを有効にする必要があります。これにより、タイムスタンプの前に履歴コメント文字が付いているため、タイムスタンプを適切に解釈できます。

_$ ssh Host 'HISTFILE=/tmp/bash_history;HISTTIMEFORMAT=" %F %T ";set -o histexpand -o history; history'
1   1971-06-12 01:37:36 pwd
2   1971-06-13 11:15:56 ls
3   1971-06-13 07:56:05 who
_

詳細については、bash(1)マンページのHISTTIMEFORMATおよび_set -H_の説明を参照してください。


注:順序は重要であるように見えます。 historyの前のhistexpandで何が起こるかを次に示します。

_$ ssh pocampo 'HISTFILE=/tmp/bash_history; HISTTIMEFORMAT=" %F %T ";set -o history -o histexpand; history'
1  ??#45556656
2  ??pwd
3  ??#45677756
4  ??ls
5  ??#45665765
6  ??who
_
2
zackse