encontrei um bug no BASH? [fechadas]

2

EDIT: o bug desaparece pela versão 4.3.8.

Estou usando GNU bash, version 4.1.2(1)-release (x86_64-redhat-linux-gnu) . Eu acredito que encontrei um bug. Gostaria de saber se talvez esteja faltando alguma coisa ou se meu bug é específico da versão / plataforma.

As funções de histórico do Bash utilizarão a variável HISTTIMEFORMAT , se definida. Então, se

HISTTIMEFORMAT=%s

Em seguida, history produz:

60  1460542926 history

Além disso, history -w resulta no arquivo de histórico que contém:

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

No entanto , se a variável estiver definida em desta forma :

: ${HISTTIMEFORMAT:=%s }

a saída de history está correta, mas history -w falha ao gravar os cabeçalhos de registro de data e hora em $HISTFILE .

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

Se eu simplesmente fizer export HISTTIMEFORMAT ou declare HISTTIMEFORMAT , o problema desaparece. No entanto, se a variável for em vez disso exportada automaticamente via set -a , não funcionará.

Eu não consegui reproduzir esse tipo de resultado com uma variável diferente, PS2 .

Da versão 4.3.8 em execução no sistema Mint 17 / Ubuntu

Método 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$ 

Método 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$ 

Dos sistemas RHEL6 e RHEL7

incluindo GNU bash, version 4.2.46(1)-release (x86_64-redhat-linux-gnu) e version 4.1.2(1)-release (x86_64-redhat-linux-gnu)

Método 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

Método 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
    
por Otheus 13.04.2016 / 12:30

1 resposta

0

Outras pesquisas indicam que foi um bug e corrigido em algum momento entre as versões 4.2.xe 4.3.6.

    
por 15.04.2016 / 09:29

Tags