Que problema existe quando várias linhas de 'date' são usadas no bash?

0

Atualmente estou lendo um livro sobre programação bash, Pro Bash Programming. Em um capítulo (Capítulo 4), eles perguntam qual é o problema do script a seguir. Eu mesmo não faço ideia depois de ler. Eu devo estar esquecendo algo aqui. Alguém pode me mostrar qual é o problema aqui?

year=$( date +%Y )
month=$( date +%m )
day=$( date +%d )
hour=$( date +%H )
minute=$( date +%M )
second=$( date +%S )
    
por Rizky Fakkel 11.04.2015 / 18:01

4 respostas

3

E se você estiver executando esses comandos em 31 de dezembro às 23:59:59 e o relógio passar para o próximo segundo depois de, digamos, você conseguir o mês?

Mais seguro:

read year month day hour minute second < <( date "+%Y %m %d %H %M %S" )

Tenha cuidado se você estiver usando esse valor para fazer aritmética: o shell considera 08 e 09 como números octais inválidos, e não números decimais válidos.

    
por 11.04.2015 / 18:32
1

Eu não faço isso, há um erro real no script. Mas é bem possível que, ao ler toda a corda separadamente, você finalmente leia um 'segundo' valor que não corresponde ao 'minuto' antes disso, porque já mudou ...

    
por 11.04.2015 / 18:28
0

Uma coisa que notei é que, de forma insegura, todas as 6 chamadas para date serão executadas no mesmo segundo de relógio de parede. Imagine o que pode acontecer se o roteiro chegar à primeira linha em torno de 2015-12-31 23: 59: 59.999 (mais ou menos alguns microssegundos)?

    
por 11.04.2015 / 18:30
0

Por acaso eu conheço este livro. Leia o capítulo 9 e você encontrará uma seção sobre a configuração de múltiplas variáveis a partir de um único comando. Lá eles vão dar uma explicação, o que está acontecendo aqui.

Em uma essência, ela é a) ineficiente (a data de chamada é bastante cara) eb) arriscada, pelas razões dadas por jcoppens.

    
por 11.04.2015 / 18:34

Tags