Convertendo lista de datas / horas de GMT para PST

3

Se eu executar o comando por si só, parece estar funcionando bem. Como exemplo usando:

date --date='TZ="PST" Sun Jan 01 05:00:10 2017'

Sábado, 31 de dezembro, 21:00:10 PST 2016

No entanto, estou tentando usar um arquivo de entrada com uma lista de datas / horas e ter problemas com todas as aspas e não consigo fazê-lo funcionar. Meu arquivo de entrada (exemplo name dates.input se parece com:

$ cat dates.input 
Sun Jan 01 06:49:33 2017
Sun Jan 01 05:44:17 2017
Sun Jan 01 05:43:23 2017
Sun Jan 01 05:39:13 2017
Sun Jan 01 05:00:10 2017

O comando que estou tendo problemas é:

while read i; do "date --date='TZ="PST" ${i}'"; done < dates.input

que dá

bash: date --date='TZ=PST Sun Jan 01 06:49:33 2017': command not found...
bash: date --date='TZ=PST Sun Jan 01 05:44:17 2017': command not found...
bash: date --date='TZ=PST Sun Jan 01 05:43:23 2017': command not found...
bash: date --date='TZ=PST Sun Jan 01 05:39:13 2017': command not found...
bash: date --date='TZ=PST Sun Jan 01 05:00:10 2017': command not found...

Alguém tem alguma sugestão sobre como fazer isso funcionar?

Obrigado

    
por user1869428 11.03.2018 / 23:19

1 resposta

4

Como exemplo, vamos escolher esse valor para i :

$ i='Sun Jan 01 06:49:33 2017'

Agora, vamos executar o comando no seu loop:

$ "date --date='TZ="PST" ${i}'"
bash: date --date='TZ=PST Sun Jan 01 06:49:33 2017': command not found

Como se pode ver, colocar aspas ao redor de um comando e seus argumentos confunde o shell. Tente em vez disso:

$ date --date="TZ=\"PST\" ${i}"
Sat Dec 31 22:49:33 PST 2016

O acima foi bem sucedido.

Depois de colocar este comando dentro do loop, o loop agora funciona:

$ while read i; do date --date="TZ=\"PST\" ${i}"; done < dates.input
Sat Dec 31 22:49:33 PST 2016
Sat Dec 31 21:44:17 PST 2016
Sat Dec 31 21:43:23 PST 2016
Sat Dec 31 21:39:13 PST 2016
Sat Dec 31 21:00:10 PST 2016
    
por John1024 11.03.2018 / 23:27