2012-04-14 81 views
0

我試圖運行下面的腳本來修改低吼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

第三行會更有意義,如果它說:默認寫... – jackrabbit 2012-04-14 13:17:09

回答

1

不要將命令在一個變量中,引用不工作,你認爲它(見BashFAQ #050: I'm trying to put a command in a variable, but the complex cases always fail!)的方式。 (順便說一下,echo $cmd並沒有告訴你實際執行什麼命令)。只需直接運行命令。

此外,我認爲你試圖運行defaults write ...,而不是defaults read ...。最後,最後一行的回聲和反引號可以有效地相互抵消 - 只需刪除兩者。下面是我得到:

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

謝謝,它的工作原理就像一個魅力。順便說一下,我用了第一種方法。 – 2012-04-14 18:03:43

相關問題