我知道主题看起来非常熟悉并且有相同的答案,但我的问题是别的。我有一个 .bat 文件,其中我传递的数据超过 10个参数(我知道限制是9但我需要它。)它似乎工作正常。脚本在下面 - :
@ECHO OFF
setlocal EnableDelayedExpansion
set n=0
for %%a in (%*) do (
set vector[!n!]=%%a
set /A n+=1
)
SET sadminUser=%vector[0]%
SET sadminPassword=%vector[1]%
SET dsnProvider=%vector[2]%
SET dbUserName=%vector[3]%
SET schemaFilePath=%vector[4]%
SET ddldictschemalogPath=%vector[5]%
SET repositoryName=%vector[6]%
SET ddlimpschemalogPath=%vector[7]%
SET grantUserRole=%vector[8]%
SET userId=anyuser
SET host=myhost
SET password=password
SET datatable=%vector[9]%
SET indexTable=%vector[10]%
SET ddlimpschemalogPath2=%vector[11]%
echo %ddlimpschemalogPath2%
echo y | "C:\Program Files\PuTTY\plink" -ssh %userId%@%host% -pw %password% exit
"C:\Program Files\PuTTY\plink" -ssh %userId%@%host% -pw %password% "PATH=/bin:/usr/bin:/usr/local/bin /opt/siebel/w44gq8sw/DDL_Sync.sh %sadminUser% %sadminPassword% %dsnProvider% %dbUserName% %schemaFilePath% %ddldictschemalogPath% %repositoryName% %ddlimpschemalogPath% %grantUserRole% %datatable% %indexTable% %ddlimpschemalogPath2%" > ddlSuccess.txt 2>&1
现在你看到我正在做 echo%ddlimpschemalogPath2%这是数组中的最后一个参数,我也可以看到正确的输出。
问题是当我尝试将这些参数传递到 UNIX Shell脚本时。您可以看到我正在使用putty命令行Plink
在bat文件中进行操作。我也可以成功连接到 shell脚本,我试图回显shell脚本中所有传递的参数。但是面临一些问题。脚本在下面 - :
#!/bin/bash
sadminUser=$1
sadminPassword=$2
dsnProvider=$3
dbUserName=$4
schemaFilePath=$5
ddldictschemalogPath=$6
repositoryName=$7
ddlimpschemalogPath=$8
grantUserRole=$9
datatable=${10}
indexTable=${11}
ddlimpschemalogPath2=${12}
echo "$sadmimUser"
echo "$sadminPassword"
echo "$ddlimpschemalogPath2"
echo password | sudo -S -l
sudo host << EOF
// Do something else
EOF
我发现了一个问题。在.bat
我有一个名为 - :repositoryName
的参数。当我echo %repositoryName%
时,它会给"Siebel Repository"
正确的输出。现在,当这个间隔值作为参数传递给shell script
时,它会分成两个不同的值,所以:
脚本中的这两个参数有两个不同的值 - :
repositoryName=$7
ddlimpschemalogPath=$8
输出 - :
Siebel
repository
它应该是参数repositoryName=$7
的一个值。给予价值Siebel Repository
。为什么会这样?这可以解释为什么价值上涨和下跌吗?
正如您在.bat
中看到的那样,我正在调用shell脚本,并传递从.bat
文件中获取的参数,如下所示:
DDL_Sync.sh %sadminUser% %sadminPassword% %dsnProvider% %dbUserName% %schemaFilePath% %ddldictschemalogPath% %repositoryName% %ddlimpschemalogPath% %grantUserRole% %datatable% %indexTable% %ddlimpschemalogPath2%" > ddlSuccess.txt 2>&1
您可以在.bat
中看到上面的完整一行。
调用.bat
文件 - :
dlSync.bat "SAD" "glob81" "gepf_DSN" "SIEBEL" "/global/u70/globepfdev/siebel/schema.ddl" "/global/u70/globepfdev/siebel/siebsrvr/log/dev2prod/output/expschem.log" "Siebel Repository" "/global/u70/globepfdev/siebel/siebsrvr/log/dev2prod/output/ddlsync1.log" "SSE_ROLE" "GLOB_DATA_SMALL" "GLOB_INDEX_SMALL" "/global/u70/globepfdev/siebel/siebsrvr/log/dev2prod/output/ddlsync2.log"
相同的参数传递给shell脚本。其中"Siebel Repository"
分为2.谢谢