为什么我的脚本需要永远运行?

时间:2012-05-31 22:02:10

标签: unix grep

#! /bin/sh

if [ $# -ne 2 ]
then
    echo "Invalid argument count."
    echo "Usage: $0 <dir1> <dir2>"
    exit
fi

ls $1 >> dir1


for file in $2/*
do
        grep $file $dir1
done

rm $dir1

我编写了上面的脚本,打算打印两个目录中的所有文件,这些目录的名称作为参数传递给脚本。

但是当我运行脚本时,它花了很长时间。 (实际上从未完成!)

有没有人碰巧知道我在这里做错了什么?

由于

2 个答案:

答案 0 :(得分:1)

$ dir1未定义,因此grep只有一个参数并在标准输入中搜索$ file。所以grep正在等待输入,它将永远等待。

答案 1 :(得分:0)

我必须设置一个测试以确保,但您从未为$dir1设置值,您只需将ls重定向到名为dir1的文件中。

那怎么样?

#! /bin/sh

if [ $# -ne 2 ]
then
    echo "Invalid argument count."
    echo "Usage: $0 <dir1> <dir2>"
    exit
fi

ls $1 >> dir1


for file in $2/*
do
        grep $file dir1
done

rm dir1

当我得到一个没有明显的预期输出的脚本时。我杀了它,然后将shell调试功能添加到脚本中。

在顶部,如

#!/bin/sh -vx

或者在脚本中我怀疑有问题的任何地方或在第二行,即

set -vx

或者,如果我非常确定问题出在哪里,并且上面会产生很多东西要滚动,那么我就会隔离可疑线路,打开和关闭调试,即

set -vx
suspect_code
set +vx

最后,我认为你的问题可以简化为

ls $1 >> dir1
ls $2/* | fgrep -f dir1 

如果您的文件/目录中包含空格,CR或其他令人讨厌的内容,则会有此限制。如果你有干净的文件名,它应该可以工作。

我希望这会有所帮助。