我的一个脚本中有以下代码。虽然脚本工作正常并产生预期的输出,但每次都会出现以下错误:
callHomeProperties.sh:line 154:1:找不到命令 callHomeProperties.sh:第160:1行:找不到命令
148 if [[ "$OS_VERSION_DB" = "$OS_VERSION_FILE" && "$DB_DETAILS_DB" = "$DB_DETAILS_FILE" && "$APP_SERVER_DB" = "$APP_SERVER_FILE" && "$AAOP_VERSION_DB" = "$AAOP_VERSION_FILE" && "$VMWARE_DB" = "$VMWARE_FILE" ]]; then
149 echo "same entry for the customer updating the time stamp and the data date"
150 `$ORACLE_HOME/bin/sqlplus -s /nolog <<endSQL
151 connect call_home/call_home@$ORASVC
152 update call_home_headers set LAST_UPDATED_DATE = sysdate where (CUSTOMER_NAME='$CUSTOMER_NAME_FILE' and OS_VERSION='$OS_VERSION_DB' and DB_DETAILS='$DB_DETAILS_DB' and APP_SERVER='$A PP_SERVER_DB' and AAOP_VERSION='$AAOP_VERSION_DB' and VMWARE='$VMWARE_DB');
153 exit
154 endSQL`
155 `$ORACLE_HOME/bin/sqlplus -s /nolog <<endSQL
156 connect call_home/call_home@$ORASVC
157 update call_home_headers set DATA_DATE = TO_DATE('$DATA_DATE_FILE','yyyy/MM/dd HH/MI/SS') where (CUSTOMER_NAME='$CUSTOMER_NAME_FILE' and OS_VERSION='$OS_VERSION_DB' and DB_DETAILS='$ DB_DETAILS_DB' and APP_SERVER='$APP_SERVER_DB' and AAOP_VERSION='$AAOP_VERSION_DB' and VMWARE='$VMWARE_DB');
158
159 exit
160 endSQL`
161
有人可以帮忙吗?我已经尝试过dos2unix,假设它是一个问题,因为行结束,但是没有用。
由于
答案 0 :(得分:1)
每个sqlplus
命令都在反引号中,因此shell将尝试执行命令的输出。我猜测输出不是有效的shell,这就是它抱怨的原因。
简单的解决方法是删除反引号:
"$ORACLE_HOME"/bin/sqlplus -s /nolog <<endSQL
connect call_home/call_home@$ORASVC
update call_home_headers set LAST_UPDATED_DATE = sysdate where (...);
endSQL
清除$ORASVC
和您使用的其他变量可能是一个好主意,除非它们来自可靠来源(即非用户输入)并且不包含对SQL有意义的任何内容,否则您有一堆SQL注入漏洞等待被利用。