2012-04-14 11 views
0

Ich habe versucht, das folgende Skript auszuführen, um den Zeitstempel im Growl-Plist zu ändern, aber das Skript kann das Plist nicht aktualisieren. Wenn ich das gleiche von der Befehlszeile ausführen, funktioniert es gut.Mac OS X Standard Wie wird das aktuelle Datum übergeben?

Bitte helfen.

#!/bin/sh 
current=`date +"%Y-%m-%d %l:%M:%S +0000"` 
cmd="defaults read com.Growl.GrowlHelperApp LastUpdateCheck -date '$current'" 
echo $cmd 
`$cmd` 
echo `defaults read com.Growl.GrowlHelperApp LastUpdateCheck` 
+1

Die dritte Zeile würde mehr Sinn machen, wenn sie den defaults write ... – jackrabbit

Antwort

1

Stellen Sie den Befehl nicht in einer Variablen, wird die Angabe der Art und Weise arbeiten, die Sie denken, es ist (BashFAQ #050: I'm trying to put a command in a variable, but the complex cases always fail! sehen). (Und BTW der echo $cmd sagt Ihnen nicht, welcher Befehl tatsächlich ausgeführt wird). Führen Sie den Befehl direkt aus.

Außerdem nehme ich an, dass Sie versuchen, defaults write ..., nicht defaults read ... auszuführen. Schließlich heben sich das Echo und die Backquotes der letzten Zeile gegenseitig auf - entfernen Sie beide. Hier ist, was ich bekommen:

#!/bin/sh 
current=$(date +"%Y-%m-%d %l:%M:%S +0000") 
defaults write com.Growl.GrowlHelperApp LastUpdateCheck -date "$current" 
printf "New value of LastUpdateCheck: " 
defaults read com.Growl.GrowlHelperApp LastUpdateCheck 

Wenn aus irgendeinem Grund, Sie tatsächlich benötigen Sie den Befehl in einer Variablen zu speichern, bevor es ausgeführt wird, ein Array verwenden. Aber beachten Sie, dass dies eine bash-only-Funktion, so starten Sie das Skript mit #!/bin/bash:

#!/bin/bash 
current=$(date +"%Y-%m-%d %l:%M:%S +0000") 
cmd=(defaults write com.Growl.GrowlHelperApp LastUpdateCheck -date "$current") 
printf "About to execute:" 
printf " %q" "${cmd[@]}" # Need to use printf trickery to get appropriate quoting 
printf "\n" 
"${cmd[@]}" 
printf "New value of LastUpdateCheck: " 
defaults read com.Growl.GrowlHelperApp LastUpdateCheck 
+0

Dank, es funktioniert wie ein Charme. Übrigens habe ich den ersten Ansatz verwendet. –