BASHでバグを見つけましたか? [閉鎖]

BASHでバグを見つけましたか? [閉鎖]

編集:バージョン4.3.8でバグが消えました。

を使用していますGNU bash, version 4.1.2(1)-release (x86_64-redhat-linux-gnu)。バグを見つけたと思います。私が何かを見逃しているのか、私のエラーがバージョン/プラットフォームに固有のものかどうか疑問に思います。

Bashの履歴関数は、定義されている場合はこの変数を使用しますHISTTIMEFORMAT。したがって、

HISTTIMEFORMAT=%s

次に、次のようにhistory生成します。

60  1460542926 history

また、history -w履歴ファイルの結果には以下が含まれます。

#1460543065
cat $HISTFILE
#1460543082
HISTTIMEFORMAT=%s
#1460543084
history -w

しかし、、変数が次に定義されている場合この方法:

: ${HISTTIMEFORMAT:=%s }

すると出力はhistory正確ですが、history -w タイムスタンプヘッダーを書き込めません。到着する$HISTFILE

unset HISTTIMEFORMAT
: ${HISTTIMEFORMAT:=%s }
history -w

単に実行したりexport HISTTIMEFORMATするとdeclare HISTTIMEFORMAT問題が消えます。ただし、変数が次のような場合代わりに自動エクスポートを使用すると機能set -aしません。

他の変数を使用してこの結果を再現することはできませんPS2


バージョン4.3.8以降、Mint 17 / Ubuntuシステムで実行されます。

方法1

$ bash --version
GNU bash, version 4.3.8(1)-release (x86_64-pc-linux-gnu)
$ bash --norc
bash-4.3$ HISTFILE=/tmp/histfile.$$
bash-4.3$ history -c
bash-4.3$ HISTTIMEFORMAT="%s "
bash-4.3$ history
    1  1460642608 HISTTIMEFORMAT="%s "
    2  1460642610 history
bash-4.3$ history -w
bash-4.3$ cat $HISTFILE
#1460642608
HISTTIMEFORMAT="%s "
#1460642610
history
#1460642612
history -w
bash-4.3$ 

方法2

$ bash --norc
bash-4.3$ HISTFILE=/tmp/histfile.$$
bash-4.3$ history -c
bash-4.3$ : ${HISTTIMEFORMAT:="%s "}
bash-4.3$ history
    1  1460642758 : ${HISTTIMEFORMAT:="%s "}
    2  1460642763 history
bash-4.3$ history -w
bash-4.3$ cat $HISTFILE
#1460642758
: ${HISTTIMEFORMAT:="%s "}
#1460642763
history
#1460642769
history -w
bash-4.3$ 

RHEL6およびRHEL7システムで

含めるGNU bash, version 4.2.46(1)-release (x86_64-redhat-linux-gnu)version 4.1.2(1)-release (x86_64-redhat-linux-gnu)

方法1

~$ bash --version
GNU bash, version 4.1.2(1)-release (x86_64-redhat-linux-gnu)
Copyright (C) 2009 Free Software Foundation, Inc.
License GPLv3+: GNU GPL version 3 or later <http://gnu.org/licenses/gpl.html>

This is free software; you are free to change and redistribute it.
There is NO WARRANTY, to the extent permitted by law.
~$ bash --norc
bash-4.1$ HISTFILE=/tmp/histfile.$$
bash-4.1$ history -c
bash-4.1$ HISTTIMEFORMAT="%s "
bash-4.1$ history -w
bash-4.1$ cat $HISTFILE
#1460643571
HISTTIMEFORMAT="%s "
#1460643573
history -w
bash-4.1$ exit

方法2

~$ bash --norc
bash-4.1$ HISTFILE=/tmp/histfile.$$
bash-4.1$ history -c
bash-4.1$ : ${HISTTIMEFORMAT:="%s "}
bash-4.1$ history -w 
bash-4.1$ cat $HISTFILE
: ${HISTTIMEFORMAT:="%s "}
history -w 
bash-4.1$ history
3  1460643602 : ${HISTTIMEFORMAT:="%s "}
4  1460643606 history -w 
5  1460643608 cat $HISTFILE
6  1460643719 history

ベストアンサー1

さらなる調査によると、これはバグであり、バージョン4.2.xとバージョン4.3.6の間でいつか修正されました。

おすすめ記事