【问题标题】:Perl script not running from ksh filePerl 脚本未从 ksh 文件运行
【发布时间】:2013-08-09 21:56:39
【问题描述】:

我试图在 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 的东西在那里。

【问题讨论】:

    标签: perl ksh sql-loader


    【解决方案1】:

    看起来您正在echo正在执行 perl 命令,但实际上并未运行它。

    【讨论】:

      【解决方案2】:

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

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

      到这里:

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

      (运行命令不需要回显)

      【讨论】:

      • hm,即使在删除回声并切换到双引号之后,它仍然没有预先添加 $data。它可能不喜欢将文件放在不同的目录中吗?
      • @dlkulp echo $filePath 在此行之前并确保您提供的路径是您具有写入权限的实际文件。
      • 啊,看来我也不需要在这个系统上指定perl的位置,所以现在可以了!
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2013-06-12
      • 2012-04-22
      • 2016-08-16
      • 1970-01-01
      • 2010-09-26
      • 2010-12-04
      • 2017-10-26
      相关资源
      最近更新 更多