2012-04-14 7 views
0

私はGrowl plistのタイムスタンプを変更するために以下のスクリプトを実行しようとしましたが、スクリプトはplistを更新できません。 コマンドラインから同じものを実行するとうまくいきます。Mac OS Xのデフォルト現在の日付を渡す方法は?

助けてください。

#!/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

それはデフォルトが書き込み言った場合3行目は、より理にかなって... – jackrabbit

答えて

1

引用は、あなたはそれが(BashFAQ #050: I'm trying to put a command in a variable, but the complex cases always fail!を参照)んだと思うように動作しません、変数にコマンドを入れないでください。 (そして、echo $cmdは、実際に実行されるコマンドを教えてくれません)。コマンドを直接実行してください。

また、defaults read ...ではなく、defaults write ...を実行しようとしています。最後に、最後の行のエコーとバッククォートは効果的に互いにキャンセルします。両方を削除するだけです。ここで私は何を得るのです。何らかの理由で、あなたが実際にそれを実行する前に、変数にコマンドを格納する必要がない、場合

#!/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 

、配列を使用します。しかし、これはbashの専用機能であることに注意してください、そう#!/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

おかげで、それは魔法のように動作します。ところで、私は最初のアプローチを使用しました。 –

関連する問題