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 버전 사이에서 언젠가 수정되었습니다.

관련 정보