从Oracle并发程序运行UNIX shell脚本时出现问题

hsvhsicv  于 2023-04-29  发布在  Oracle
关注(0)|答案(4)|浏览(236)

我试图运行一个主机脚本,我已经建立在KSH shell 使用Oracle并发程序。
我的测试脚本如下:

echo "System Parameters passed by Concurrent Manager"
echo "+--------------------------------------------+"
XXWIN_PROGRAM=$0
XXWIN_LOGIN=$1
XXWIN_USERID=$2
XXWIN_USERNAME=$3
XXWIN_REQUEST_ID=$4
echo "XXWIN_PROGRAM    :"$XXWIN_PROGRAM
echo "XXWIN_LOGIN      :"$XXWIN_LOGIN
echo "XXWIN_USERID     :"$XXWIN_USERID
echo "XXWIN_USERNAME   :"$XXWIN_USERNAME
echo "XXWIN_REQUEST_ID :"$XXWIN_REQUEST_ID

shift 4
echo ""
echo "User Parameters passed by Concurrent Manager"
echo "+------------------------------------------+"
echo "1  :"$1
echo "2  :"$2
echo "3  :"$3
echo "4  :"$4
echo "5  :"$5
echo "6  :"$6
echo "7  :"$7
echo "8  :"$8
echo "9  :"$9
echo ""

# Generic Script Begins
# Declaring Constants, Data File Path, Control File Path etc 

CTL_FILE_NAME=$1     # Control File Name(s)
CTL_FILE_PATH=$2     # Control File Path
DATA_FILE_NAME=$3    # Data File Name(s)
DATA_FILE_PATH=$4    # Data File Path
COMPONENT_NAME=$5    # Interface Component Name
SEQ_VALIDATION=$6    # Sequence Name
SUPPORT_EMAIL= $7    # Support e-mail(s) List

# Printing the User Parameters
echo "1  :"$CTL_FILE_NAME
echo "2  :"$CTL_FILE_PATH
echo "3  :"$DATA_FILE_NAME
echo "4  :"$DATA_FILE_PATH
echo "5  :"$COMPONENT_NAME
echo "6  :"$SEQ_VALIDATION
echo "7  :"$SUPPORT_EMAIL

# Assigning the Archive, IN and Prog Dir Paths
ARCHIVE_DIR="$XXWIN_TOP/bin/TEMP/archive"
XXWIN_IN_DIR="$XXWIN_TOP/bin/TEMP/in"
XXWIN_PROG_DIR="$XXWIN_TOP"

# Printing the directories
echo "Archive Directory :" $ARCHIVE_DIR
echo "IN Directory :" $XXWIN_IN_DIR
echo "Program Directory :" $XXWIN_PROG_DIR

i=10
k=5
j=`expr $i + $k`
echo $j

echo $i 

echo "Out of Concurrent Program"

Shell脚本程序名称以“”结尾。prog”
我正在使用以下参数运行并发请求:

程序正常完成,但我收到以下日志消息。

如果我使用的是#!/usr/bin/ksh,程序会错误地完成,所以我运行的主机文件没有这个。从日志中可以清楚地看到,当脚本中遇到空格时,它会抛出一个错误,说“没有找到命令”。你也可以看到我在做一个简单的加法,即使是这样也不被认可。
在这方面的任何帮助都是非常感谢的。
Thanks:)

lsmepo6l

lsmepo6l1#

您是否碰巧使用Windows系统上的编辑器来创建脚本?它在每一行的末尾放置了一个回车符+换行符,而不是Unix的换行符。这会扰乱脚本的执行。Unix系统通常有一个类似“dos2unix”的命令来转换文件。
如果不是这样,我会尝试从命令行手动运行脚本,以确保它正常工作。

7eumitmz

7eumitmz2#

当我尝试使用CAT -vt <filename>读取文件时,我可以看到文件包含特殊字符,如^M和^I。这可能是因为文件传输模式(但我在ASCII模式下传输,仍然出现特殊字符)。
我打开了一个VI编辑器并粘贴了相同的脚本。保存文件,尝试运行脚本,运行正常。
我还是不明白这些特殊的字符是怎么出现的。我使用Notepad++作为编辑器。

qfe3c7zg

qfe3c7zg3#

当VI或CAT显示特殊字符时,没有完全完成到Linux/Unix兼容性的转换。通常有很多解决方案,也许Notepad++就是这里的原因。也许不是。在操作系统本身上编写脚本不仅更快(不需要FTP,这已经是一个很大的优势),而且你不必面对这些烦人的控制M字符。ASCII转换有时会失败。您也可以尝试其他FTP程序。或者说,一切都是虚妄的,就像上面所说的那样。

dsf9zpds

dsf9zpds4#

Notepad可以将文件保存为Windows CRLF或Unix/Linux LF格式Notepad编辑-EOL转换-选择Windows或Unix,然后保存。如果并发管理器足够聪明,可以在需要时为您转换它,那就太好了。

相关问题