Grep 在 bash 脚本中返回“没有这样的文件或目录”,手动工作

Grep 在 bash 脚本中返回“没有这样的文件或目录”,手动工作

运行 bash .sh 脚本时收到“grep:文件名:没有这样的文件或目录”。

命令正在手动运行。文件类型是“ASCII 文本,具有很长的行”。这会引起问题吗?

overall_row_count=$(grep -c "^000[1-5]" $filename)
trailer=$(awk 'substr($0,0,4)=="T999" {print}' ${filename})
overall_trailer_count=$(echo "${trailer:29:8}" | sed 's/^0*//')
if [[ ${overall_row_count} == ${overall_trailer_count} ]]
      then 
      echo "Count matches"
      else echo "Count doesn't match"
fi
    
p=53
for i in {0001..0005} 
do 
row_count=$(grep -c "^$i" $filename)  
trailer_count=`echo "${trailer:$p:7}" | sed 's/^0*//'`
p=`expr $p + 7`
if [[ ${row_count} -eq ${trailer_count} ]]; then
    echo "Count matches."
else
    echo "Count doesn't match"
fi
done

设置-x输出

++ grep -c '^000[1-5]' BB.CD.20210502.DAT
grep: BB.CD.20210502.DAT: No such file or directory
+ overall_row_count=
++ awk 'substr($0,0,4)=="T999" {print}' BB.CD.20210502.DAT
awk: fatal: cannot open file `BB.CD.20210502.DAT' for reading (No such file or directory)
+ trailer=
++ echo ''
++ sed 's/^0*//'
+ overall_trailer_count=
+ [[ '' == '' ]]
+ echo 'Count matches'
Count matches 
+ p=53
+ for i in '{0001..0005}'
++ grep -c '^0001' BB.CD.20210502.DAT
grep: BB.CD.20210502.DAT: No such file or directory
+ row_count=

++ echo '' ++ s

答案1

您的问题不太可能是文本文件中的长行。

更有可能的是,您的脚本正在更改工作目录的上下文中运行,或者以令人惊讶的方式更改 $filename 的内容。

您是否尝试过将 set -x 放入脚本中以准确查看执行时 $filename 的内容?这可能会提供一些线索。

在脚本中添加 pwd 命令也可能会给您提供线索。

如果这不能让您走上正轨,请更新您的问题以包含您从我的上述建议中获得的信息,并且可能会提供一些更有针对性的建议。

答案2

我遇到了类似的问题,grep什么也没找到,在我的情况下,是由于我创建了一个路径变量dir="~/git/Marlin",在出现使用grep foo $dir/bar错误后,为了修复它,我必须更改为dir="$HOME/git/Marlin"并修复它。

相关内容