我有一个脚本位于Unix服务器中,如下所示:
mainScript.sh
#some stuff here
emailScript.sh $PARAM_1 $PARAM_2
#some other stuff here
如您所见,mainScript.sh正在调用另一个名为 emailScript.sh 的脚本。
emailScript.sh 应该通过sqlplus执行查询,然后解析结果并通过电子邮件返回(如果有的话)。
emailScript.sh 中代码的有趣部分是:
DB_SERVER=$1
USERNAME=$2
PASSWORD=$3
EVENT_DATE=$4
LIST_AUTHORIZED_USERS=$5
ENVID=$6
INTERESTED_PARTY=$7
RAW_LIST=$(echo "select distinct M_OS_USER from MX_USER_CONNECTION_DBF where M_EVENT_DATE >= to_date('$EVENT_DATE','DD-MM-YYYY') and M_OS_USER is not null and M_OS_USER not in $LIST_AUTHORIZED_USERS;" | sqlplus -s $USERNAME/$PASSWORD@$DB_SERVER)
如您所见,我所做的只是创建使用RAW_LIST
执行查询的变量sqlplus
。
问题如下:
sqlplus
命令可以正常工作并返回一些内容。 ssh
连接)调用脚本 mainScript.sh ,sqlplus
将不返回任何内容0秒,这意味着它甚至没有尝试自己执行。 为了调试,我打印了所有变量,查询本身,以检查是否有正确设置的东西:一切都正确设置。
似乎无法识别命令 sqlplus
,或类似。
请问您如何调试此问题?我应该在哪里看问题?
答案 0 :(得分:1)
你需要在这里考虑一些事情。在运行脚本时,从哪个目录位置执行脚本?当您从外部应用程序执行脚本时,它正在执行脚本的目录位置。更好地使用脚本的完整路径,如/path/to/the/script/script.sh
或使用cd /path/to/the/script/
命令首先转到脚本目录并执行脚本。还要检查应用程序的执行权限。您作为用户可能有权执行脚本或sql命令,但您的应用程序没有该权限。检查应用程序的用户ID,并将其添加到正确的组中。