プログラムで Bash レコードに項目を追加し、タイムスタンプが機能するようにするにはどうすればよいですか?

プログラムで Bash レコードに項目を追加し、タイムスタンプが機能するようにするにはどうすればよいですか?

CentOS 6.2 および Bash 4.1.2(1) で、以下を含むファイルを追加しました/etc/profile.d

HISTTIMEFORMAT='%c : '
history -s "# some text as a marker"

これは、変数が設定され、タグがユーザーの履歴リストに記録されている限り(そして記録~/.bash_historyされている場合exit)、機能します。

問題は次のとおりです。

  • history -sマーカーを追加するときにタイムスタンプを追加しないでください。
  • 戻るスクロール履歴が表示で停止します(~/.bash_historyファイルはメモリに読み込まれません)。
  • コメントを表示する履歴項目には、(欠落している)タイムスタンプの代わりに「??」があります。

私は以下を追加してみました:

history -s "#$(date +%s)"

他のhistory -sコマンドの前にありますが、Bashはそれを同じ形式にもかかわらず、タイムスタンプではなく履歴のコマンドとして扱います。

別のオプションは、マーカーとタイムスタンプをセッションに直接添付することです~/.bash_history。ただし、後で追加すると、セッション履歴のアクティビティとは連続しません。他のユーザーまたは単一のユーザーの複数のセッションによって、タグと関連セッションの間に追加のセッションが追加されることがあります。

これらの問題を解決する方法はありますか?

修正する:

set -o historyその行を追加(および削除)してみましたが、上記の履歴history -s "#$(date +%s)"スクロールの問題を解決したようですが、欠落しているタイムスタンプはまだ問題です。

答え1

私はこの質問を投稿しました。bashメーリングリストヘルプそして管理者であるChet Rameyから回答を受けました。吹く

彼はコマンドの前に次のいずれかを追加することをお勧めしますhistory -s

set -H    # aka set -o histexpand

または

histchars='!^#'

私はそれらすべてを試してみました、そしてすべて働きました。その理由は、#プロファイルコード実行時にデフォルトの履歴コメント文字が設定されておらず、null( \0) だからです。

これは私の作業ファイルです。

HISTTIMEFORMAT='%c : '
histchars='!^#'
set -o history
history -s "# some text as a marker"

関連情報