星号在脚本中不起作用

时间:2012-09-26 16:51:51

标签: linux shell unix

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

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
}

1 个答案:

答案 0 :(得分:2)

尝试在zgrep行之前添加以下内容:

echo "zgrep $line2 *.gz"

你得到什么输出?

此外,尝试使用等效的find命令替换通配符表达式,并查看行为是否更改:

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

这个剧本你的shebang线是什么样的?在命令行上尝试命令时使用了什么shell?

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