1

当我在我的脚本中写下这一行时,它不起作用,它无法在那里找到任何这样的文件。但是通过命令行它正在工作。每个命令都发生这种情况,*没有给出文件名。

zgrep  $line2 *.gz  >> CSP_Final_${DATE_TIME}.DAT

错误是:

 file_loop line2
+ line2=line2
+ zgrep line2 '*.gz'
+ 1>> CSP_Final_20120926_221841.DAT
gzip: *.gz: No such file or directory

代码 :

while read line
    do

if [[ ${profile_count} -gt 700 ]]
                           then
                                DATE_TIME=`date +'%Y%m%d_%H%M%S'`
                                export profile_count=1
                                sleep 1
                           fi
        profile_count=`expr ${profile_count} + 1`
 count=`expr ${count} + 1`
echo " ${count} \t"
echo "${profile_count} \t"
echo $line1
#export line2=`echo ${line}`

file_loop line2
done<abhi


file_loop()
{
line2=$1
#while read line1
#do
#echo $line1
echo $PWD
zgrep  $line2 *.gz  >> CSP_Final_${DATE_TIME}.DAT
#done<abhi2
}
4

1 回答 1

2

尝试在您的zgrep行之前立即添加以下内容:

echo "zgrep $line2 *.gz"

你得到什么输出?

另外,尝试用等效的命令替换通配符表达式,find看看行为是否改变:

zgrep $line2 $(find . -maxdepth 1 -iname '*.gz')

对于这个脚本,你的 shebang 线是什么样的?当您在命令行上尝试命令时,您使用的是什么 shell?

更新: 我看到你正在使用#!/bin/ksh -xvf作为 shebang 线。如果我没记错的话,该-f选项会禁用文件名通配。这将解释您所看到的行为。由于您的交互式 shell 没有设置此选项,因此代码可以在那里工作。尝试删除该-f选项,看看行为是否改变。

于 2012-09-26T20:06:45.013 回答