shell和perl在同一个文件中

时间:2017-09-16 10:19:10

标签: shell perl

下面的代码我用shell脚本编写,但它有一些perl命令

当我从表单终端手动执行脚本以下时,我能够执行完整的代码

但是当我使用crontab时,我能够执行除下面代码之外的所有行

mixvl.pl $f `ls $f | awk -F "-in." '{print $1}'`-out.talaw `ls $f | awk -F "-in." '{print $1}'`
 #!/bin/bash
 rsync -avz /dacx /storage/mp3/
 if [ $status0 -eq 0 ];then
    FILES=/storage/mp3/*
    for f in $FILES
    do
           mixvl.pl $f `ls $f | awk -F "-in." '{print $1}'`-out.talaw `ls $f | awk -F "-in." '{print $1}'`
           lame -q0 -b8 `ls $f | awk -F "-in." '{print $1}'`.wav `ls $f | awk -F "-in." '{print $1}'`.mp3
           rm -rf `ls $f | awk -F "-in." '{print $1}'`.wav
            rm -rf `ls $f | awk -F "-in." '{print $1}'`-out.talaw
            rm -rf $f
          fi
       fi
    done
 fi

你可以帮我在文件中执行perl和shell吗

1 个答案:

答案 0 :(得分:0)

您的代码有几个问题:

    永远不会设置
  • status0变量:使用$?
  • 您有几个fi个关键字,没有if声明
  • Don't parse ls
  • 您多次调用相同的命令管道。称之为一次:这就是
  • 的变量
  • 事实上,你根本不需要awk。使用shell parameter expansion
  • cron与shell的环境不同。很可能在cron的最小PATH中找不到mixvl.pl。明确指定路径。

试试这个:

rsync -avz /dacx /storage/mp3/
if [ $? -eq 0 ]; then
    for f in /storage/mp3/*
    do
        fileroot="${f%-in.*}"
        /path/to/mixvl.pl "$f" "$fileroot"-out.talaw "$fileroot"
        lame -q0 -b8 "$fileroot".wav "$fileroot".mp3
        rm "$fileroot".wav "$fileroot"-out.talaw "$f"
    done
 fi