Преобразование списка дат/времени из GMT в PST

Преобразование списка дат/времени из GMT в PST

Если я запускаю команду отдельно, то она, кажется, работает нормально. Например, использую:

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

Сб Дек 31 21:00:10 PST 2016

Однако я пытаюсь использовать входной файл со списком дат/времени и у меня возникают проблемы со всеми цитатами, и, похоже, это не работает. Мой входной файл (пример имени dates.input выглядит так:

$ 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

У меня возникли проблемы с командой:

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

который дает

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...

У кого-нибудь есть предложения, как это реализовать?

Спасибо

решение1

В качестве примера выберем следующее значение i:

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

Теперь давайте выполним команду в вашем цикле:

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

Как можно заметить, заключение команды и ее аргументов в кавычки сбивает оболочку с толку. Попробуйте вместо этого:

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

Вышеизложенное успешно.

После помещения этой команды в цикл, цикл теперь работает:

$ 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

Связанный контент