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