Skip to content

Commit 5c088fe

Browse files
committed
history: include "HISTFILE" in the invalid timestamp mesasge
1 parent 97c6cae commit 5c088fe

File tree

3 files changed

+112
-1
lines changed

3 files changed

+112
-1
lines changed

docs/ChangeLog.md

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -304,6 +304,7 @@
304304
- github: update GitHub issue templates `#D2294` aa396f60
305305
- memo: fix syntax error in the testing code for #D1779 (reported by andychu) `#D2329`
306306
- github: fix URLs in the nightly description (reported by TheFozid) `#D2373` xxxxxxxx
307+
- history: include `HISTFILE` in the invalid timestamp mesasge (motivated by Strykar) `#D2374`
307308

308309
## Test
309310

note.txt

Lines changed: 104 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1926,6 +1926,104 @@ bash_tips
19261926
- make_command.sh の整理 (scan 分離, char_width 分離)
19271927
- note.txt -> memo.txt
19281928

1929+
2025-07-02
1930+
1931+
* [保留] 3.2: 複数行の履歴項目がある時に履歴初期化前に C-r で検索すると history の出力が dump される?
1932+
Ref #D2365
1933+
1934+
テストの途中で発生していたが再現できなくなったので取り敢えず保留にする。
1935+
1936+
* bug: 複数行コマンドがあると初回プロンプトで履歴展開が起こらない X20250702
1937+
1938+
コマンドを未だ実行していない状態で履歴展開を実行しようとしても何も発生しな
1939+
い (5.3)。もしくは変な項目に展開される (3.2)。これは最新の bash でも発生し
1940+
ている。
1941+
1942+
うーん。これは 5.3 bug の気がする。4.0..5.2 ではちゃんと動いている。それと
1943+
は別に 3.2 では別のコマンドがロードされてしまう問題が発生していた。うーん。
1944+
改めて実行してみたら 3.2 でもちゃんと動いている。不思議だ。
1945+
1946+
更に分かった事は、'!trap[SP]' は動かないが '!echo[SP]' は動くということ。更
1947+
に履歴ファイルを別の物にすると動く様になる。不思議だ…。分かった。trap の直
1948+
前のコマンドが複数行コマンドだと発生する。然し、bash 5.2 では発生しない。
1949+
1950+
resolve-multiline を実行しないようにすると問題は発生しなくなる。つまり
1951+
resolve-multiline の過程で何かが起こっている。
1952+
1953+
うーん。再現しようとすると 4.0..5.3 で再現する様なコードはできるが、5.2 で
1954+
は動いて 5.3 では動かないという構成は plain bash では難しい? stty が何か関
1955+
係しているのだろうか。もしこれが 5.3 で導入されたバグではないのだとしたら直
1956+
してもらうのは難しいのではないか?
1957+
1958+
* workaround として何が考えられるか? stty でも実行すると問題が解決するのだ
1959+
ろうか? それとも? そもそも何故コマンドを実行すると問題が発生しなくなる?
1960+
1961+
試しに stty を実行してみたが特に効果は無いようだ。不思議だ。
1962+
1963+
* 5.2 と 5.3 の両方で再現するコードにて、何故か history -r で読み取った時に
1964+
最初の項目が空になってしまっている。これは何故?
1965+
1966+
2025-06-23
1967+
1968+
* termux: export A=/[TAB] や echo /[TAB] の補完に於いて / 以下のファイルでは
1969+
なくて、現在ディレクトリの下の */* を補完候補として生成している。これは他の
1970+
環境では発生していない。
1971+
1972+
* history: "history -a; history -n" in PROMPT_COMMAND causes a wrong record
1973+
https://github.com/akinomyoga/ble.sh/issues/595#issuecomment-3002209639
1974+
1975+
history -a; history -n が PROMPT_COMMAND に入っていると最初の読み取りの時に
1976+
壊れた history entry ができあがる。これは回避する必要がある。
1977+
1978+
ble.sh を使わずに bash で起動すると別に変な事は起こらない。各行一つずつ履歴
1979+
項目になる。特に何かをした後にそれが崩れるとう訳でもない様だ。普通に
1980+
builtin history -r としても特に問題は生じない。うーん? と思ったが、よく考え
1981+
たら複数行コマンドを読み取る時には ble.sh も history -r は使っていないのだっ
1982+
た。複数行コマンドだけは history -s を通じて読み取っていた筈である。という
1983+
事を考えると、builtin history -r や bash の初期化では常に各行一項目として読
1984+
み取ると考えて良い気がする。
1985+
1986+
問題は resolve-multiline にある様な気がする。と思ったが history-multiline
1987+
を呼び出さない様にしても問題は発生する。そもそも履歴が倍加しているという事
1988+
に注意しなければならない。うーん。誰が履歴を倍加しているのか?
1989+
history/initialize で最初に history が load された時点既に倍加している気が
1990+
する。と思ったが ble/history:bash/initialize が何故か複数回呼び出されている。
1991+
何故? もっと深い ble/history:bash/load でどうなっているか確認したが、これの
1992+
最初の呼び出しの時点で倍加は起こっている。また、この load は idle から呼び
1993+
出されていて、更に idle はキー入力に対して発生している。
1994+
1995+
PROMPT_COMMAND で history -a; history -n が設定されている時、ble-attach の
1996+
中で最初の履歴のロードが実施され、更に、その後で .bashrc が終わった後で次の
1997+
履歴のロードが実施されている様な気がする。そして .bashrc が終わった後に
1998+
bash がロードしている履歴は何故か行ごとに読み取られるのではなくて全部くっつ
1999+
いた状態で読み取られてしまう。
2000+
2001+
うーん。倍加する問題は実は知っていた問題の様な気がするが、履歴項目が全部くっ
2002+
ついてしまう問題については知らなかった。先ず、履歴項目が全部くっついてしま
2003+
う問題をどうにかできないだろうか。普通に eval "$PROMPT_COMMAND" を .bashrc
2004+
の中で実行するだけだと純粋に倍加するだけで履歴項目がくっついてしまう問題は
2005+
発生しない。
2006+
2007+
とにかく .bashrc の最後では大丈夫で、最初の bind -x 呼び出しで履歴項目が壊
2008+
れている。何故履歴が全部くっついてしまうのだろうか。
2009+
2010+
* history_share=1 でも初回コマンド実行時に固まるらしい。
2011+
https://github.com/akinomyoga/ble.sh/issues/595#issuecomment-3010266326
2012+
2013+
* github: exit status 3 の謎
2014+
https://github.com/akinomyoga/ble.sh/discussions/597#discussioncomment-13561325
2015+
2016+
kitty で試すしかない
2017+
2018+
* mingw (msys2) でシンボリックリンクを作成できないのでインストールできない。
2019+
2020+
* msys1 において PATH の自動修正ができていない。
2021+
2022+
2025-06-16
2023+
2024+
* complete: for a^J[TAB] の補完が効いていない気がする。"d" と入力すると "do "
2025+
になってくれる。一方で "{" と入力しても認識していないようだ。
2026+
19292027
2025-06-04
19302028

19312029
* bash-5.3: 再度チェック
@@ -7854,6 +7952,12 @@ bash_tips
78547952

78557953
2025-07-20
78567954

7955+
* history: "!136 ...: invalid timestamp" (motivated by Strykar) [#D2374]
7956+
https://github.com/akinomyoga/ble.sh/discussions/597#discussioncomment-13561254
7957+
7958+
これはエラーメッセージをもっと親切にしても良いのではないか?
7959+
一応 HISTFILE へのパスを表示する様にした。動作確認もした。
7960+
78577961
* 2025-06-20 github: nightly の URL が壊れている (reported by TheFozid) [#D2373]
78587962
https://github.com/akinomyoga/ble.sh/discussions/593#discussioncomment-13517431
78597963

src/history.sh

Lines changed: 7 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -224,6 +224,11 @@ if ((_ble_bash>=40000)); then
224224
local -x __ble_rawbytes=$_ble_util_writearray_rawbytes # used by _ble_bin_awk_libES
225225
local -x fname_stderr=${_ble_edit_io_fname2:-}
226226

227+
local -x invalid_timestamp_msg='invalid timestamp'
228+
local histfile=${HISTFILE:-$HOME/.bash_history}
229+
[[ -s $histfile ]] &&
230+
invalid_timestamp_msg=$invalid_timestamp_msg". Please check your history file ($histfile)."
231+
227232
local apos=\'
228233
# 482ms for 37002 entries
229234
ble/builtin/history/.dump ${arg_count:+"$arg_count"} | ble/bin/awk -v apos="$apos" -v arg_offset="$arg_offset" -v _ble_bash="$_ble_bash" '
@@ -240,6 +245,7 @@ if ((_ble_bash>=40000)); then
240245
241246
fname_stderr = ENVIRON["fname_stderr"];
242247
fname_stderr_count = 0;
248+
invalid_timestamp_msg = ENVIRON["invalid_timestamp_msg"];
243249
244250
n = 0;
245251
hindex = arg_offset;
@@ -280,7 +286,7 @@ if ((_ble_bash>=40000)); then
280286
function check_invalid_timestamp(line) {
281287
if (line ~ /^ *[0-9]+\*? +.+: invalid timestamp/ && fname_stderr != "") {
282288
sub(/^ *0*/, "bash: history !", line);
283-
sub(/: invalid timestamp.*$/, ": invalid timestamp", line);
289+
sub(/: invalid timestamp.*$/, ": " invalid_timestamp_msg, line);
284290
if (fname_stderr_count++ == 0)
285291
print "" >> fname_stderr;
286292
print line >> fname_stderr;

0 commit comments

Comments
 (0)