- 论坛徽章:
- 0
|
不好意思各位,实际代码与样例代码有点出入,初步判断跟 cmdline 变量中包含双引号有关系:
- # 代码样例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:比较接近实际环境,但预期的错误跟实际环境下才错误仍然不同
- # osql 是 SQL Server 2000 带的一个命令行工具
- # 以下代码在 cygwin 环境下执行……
- 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 里可以执行,而且也达到了预期输出结果。
- ###############
- sql_output=$( ${cmd} )
- echo -e "output=$sql_output"
- # 预期输出1(如果sqlserver不存在):
- #[DBNETLIB]SQL Server 不存在或访问被拒绝
- #[DBNETLIB]ConnectionOpen (Connect()).
- # 预期输出2(如果sqlserver存在、且用户名密码都正确、且存储过程也存在):则应该是存储过程的输出结果
- # 实际输出 是 osql 的帮助信息(也就是 osql -? 命令的输出结果),而如果用 cmd="osql -b -n -S $DatabaseServer -U $DatabaseUserName -P $DatabasePassword -d $DatabaseName",则能得到预期的输出结果,所以怀疑是跟 cmd 变量中包含双引号有关
复制代码
[ 本帖最后由 lovetide 于 2008-12-16 17:46 编辑 ] |
|