Perl脚本没有从ksh文件运行

时间:2013-08-09 21:56:40

标签: perl ksh sql-loader

我正在尝试在ksh文件中运行一些perl而没有得到我对它的期望。如果我在做一些语法不正确的事情,而不是简单地得到某种错误,它就会完成运行并创建大量的.bak文件,但没有像我期望的那样在文件的每一行上加上$data

到目前为止我已经得到了什么(contains是我之前在文件中声明的函数,但该部分工作正常):

if [[ $# != 3 ]];then
     echo "Please specify 1 folder containing data files as well as 1 from and 1 to system id."
else
    for file in `ls $1`;do
        filePath=$1$file
        fileName=`echo $filePath | awk -F'/' '{print$5}'`
        contains $fileName "ACCUMS" && (
            contains $fileName ".bak" || (
                echo "Loading file: "$fileName  
                date=echo $fileName | awk -F'_' '{print$5}' | sed 's/.txt//'   
                data=$fileName"|"$2"|"$3"|"$date"|"  
                echo $data  
                echo /usr/local/bin/perl -pi.bak -e 's/^/$data/' $filePath  
                logFile="log"$curFile".txt"  
                echo "Log file: "$logFile  
                echo "Done loading file: "$fileName  
                $ORACLE_BIN/sqlldr user/pass@server control=control_file.ctl data=$filePath log=$logFile  
                curFile=$curFile+1
            )
        ) || echo $fileName" not part of Accums.  Skipped."
    done
fi

当我在PuTTY中直接运行以下内容时,它会变得更糟,所以它似乎是我试图调用perl代码的方式(尽管我看了几个做类似事情的例子)来自.ksh文件:

perl -pi.bak -e 's/^/hi|/' /path/data/file_Im_working_with.txt

如果重要,日志文件也不是我想要的。而不是为每个sqlldr调用创建它们,而不是每次都覆盖log0.txt。我已经检查过,数据文件位于正确的位置以及所有内容,所以这可能是我的问题的一部分或完全不相关的内容。

提前致谢!

修改

除了ThisSuitIsBlackNot和dms所说的,我也不需要在这个系统上指定perl的位置,这样做实际上搞砸了,这很奇怪,因为我检查过perl的东西就在那里。

2 个答案:

答案 0 :(得分:3)

看起来你是echo perl命令但实际上没有运行它。

答案 1 :(得分:1)

正如dms指出的那样,你正在回显perl命令,而不是执行它。此外,如果要插入变量data,则需要使用双引号,而不是单引号。改变这个:

echo /usr/local/bin/perl -pi.bak -e 's/^/$data/' $filePath

到此:

/usr/local/bin/perl -pi.bak -e "s/^/$data/" $filePath

(运行命令不需要回声)