2010-11-23 73 views
3

我试图运行一个HOST脚本,该脚本使用Oracle并发程序在KSH shell中生成。从Oracle并发程序运行UNIX shell脚本时发生的问题程序

我的测试脚本如下:

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”

我运行具有以下参数的并发请求结束: alt text

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

alt text

如果我使用#!/usr/bin/ksh所以我正在用的是主机文件中错误的程序完成。从日志中可以清楚地看到,当脚本遇到空间时,会抛出一个错误,指出“未找到命令”。另外,正如你所看到的,我正在做一个简单的添加,即使这也是无法识别的。

在这方面的任何帮助是非常感谢。

谢谢:)

回答

1

您碰巧在Windows系统上使用编辑器来创建脚本?它在每行的末尾放置一个回车+换行符而不是只有换行的Unix格式。这扰乱了脚本执行。 Unix系统通常有一个像“dos2unix”这样的命令来转换文件。

如果不是这样,我会尝试从命令行手动运行脚本以确保它能正常工作。

+0

我使用Notepad ++作为编辑器而不是记事本。我开发了500行代码,它的运行完全来自unix框。但我无法从oracle应用程序运行它:(。 – Arun 2010-11-24 05:50:56

0

当我试图使用CAT -vt <filename>来读取文件时,我可以看到该文件包含特殊字符,如^ M和^ I。这可能是由于文件传输模式(但我以ASCII模式传输,仍然出现特殊字符)。

我打开了一个VI编辑器并粘贴了相同的脚本。保存文件,试图运行脚本,它工作正常。

我仍然没有得到如何特殊字符出现。我使用记事本++作为我的编辑器。

0

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

相关问题