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
Die dritte Zeile würde mehr Sinn machen, wenn sie den defaults write ... – jackrabbit