- 論壇徽章:
- 0
|
不好意思各位,實際代碼與樣例代碼有點出入,初步判斷跟 cmdline 變量中包含雙引號有關(guān)系:
- # 代碼樣例2:變量中加了引號
- cmdline="date \"+%F %T\""
- $($cmdline)
- #報錯:
- #date: extra operand `%T"'
- #Try `date --help' for more information.
- sql_output=$($cmdline)
- echo $sql_output
- # 輸出:
- #date: extra operand `%T"'
- #Try `date --help' for more information.
復制代碼
- # 代碼樣例3:比較接近實際環(huán)境,但預期的錯誤跟實際環(huán)境下才錯誤仍然不同
- # osql 是 SQL Server 2000 帶的一個命令行工具
- # 以下代碼在 cygwin 環(huán)境下執(zhí)行……
- DatabaseServer=localhost
- DatabaseUserName=sa
- DatabasePassword=SA_PASSWORD
- DatabaseName=PROJECT_DATABASE
- BeginTime=2008-12-12
- EndTime=2008-12-14
- sql="execute dbo.一個存儲過程 '$BeginTime', '$EndTime'"
- echo -e "sql=\n$sql"
- # 輸出:
- #sql=
- #execute dbo.一個存儲過程 '2008-12-12', '2008-12-14'
- #cmd="osql -b -n -S $DatabaseServer -U $DatabaseUserName -P $DatabasePassword -d $DatabaseName" # 不帶雙引號
- cmd="osql -b -n -S $DatabaseServer -U $DatabaseUserName -P $DatabasePassword -d $DatabaseName -Q \"$sql\""
- echo -e "command=\n$cmd"
- # 輸出:
- #command=
- #osql -b -n -S localhost -U sa -P SA_PASSWORD -d PROJECT_DATABASE -Q "execute dbo.一個存儲過程 '2008-12-12', '2008-12-14'"
- ###############
- # 備注:上面輸出的 command 如果直接粘貼在 cygwin 里可以執(zhí)行,而且也達到了預期輸出結(jié)果。
- ###############
- sql_output=$( ${cmd} )
- echo -e "output=$sql_output"
- # 預期輸出1(如果sqlserver不存在):
- #[DBNETLIB]SQL Server 不存在或訪問被拒絕
- #[DBNETLIB]ConnectionOpen (Connect()).
- # 預期輸出2(如果sqlserver存在、且用戶名密碼都正確、且存儲過程也存在):則應(yīng)該是存儲過程的輸出結(jié)果
- # 實際輸出 是 osql 的幫助信息(也就是 osql -? 命令的輸出結(jié)果),而如果用 cmd="osql -b -n -S $DatabaseServer -U $DatabaseUserName -P $DatabasePassword -d $DatabaseName",則能得到預期的輸出結(jié)果,所以懷疑是跟 cmd 變量中包含雙引號有關(guān)
復制代碼
[ 本帖最后由 lovetide 于 2008-12-16 17:46 編輯 ] |
|