不要將命令在一個變量中,引用不工作,你認爲它(見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
第三行會更有意義,如果它說:默認寫... – jackrabbit 2012-04-14 13:17:09