Wenn ich den Befehl allein ausführe, scheint es einwandfrei zu funktionieren. Als Beispiel:
date --date='TZ="PST" Sun Jan 01 05:00:10 2017'
Sa, 31. Dez. 2016, 21:00:10 PST
Ich versuche jedoch, eine Eingabedatei mit einer Liste von Datums-/Zeitangaben zu verwenden, habe Probleme mit allen Anführungszeichen und kriege es einfach nicht hin. Meine Eingabedatei (Beispielname dates.input) sieht folgendermaßen aus:
$ 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
Der Befehl, mit dem ich Probleme habe, ist:
while read i; do "date --date='TZ="PST" ${i}'"; done < dates.input
was gibt
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...
Hat jemand Vorschläge, wie man das zum Laufen bringt?
Danke
Antwort1
Wählen wir als Beispiel diesen Wert für i
:
$ i='Sun Jan 01 06:49:33 2017'
Lassen Sie uns nun den Befehl in Ihrer Schleife ausführen:
$ "date --date='TZ="PST" ${i}'"
bash: date --date='TZ=PST Sun Jan 01 06:49:33 2017': command not found
Wie man sieht, verwirrt das Setzen von Anführungszeichen um einen Befehl und seine Argumente die Shell. Versuchen Sie stattdessen:
$ date --date="TZ=\"PST\" ${i}"
Sat Dec 31 22:49:33 PST 2016
Das oben genannte ist erfolgreich.
Nachdem Sie diesen Befehl in die Schleife eingefügt haben, funktioniert die Schleife nun:
$ 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