#! /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
我编写了上面的脚本,打算打印两个目录中的所有文件,这些目录的名称作为参数传递给脚本。
但是当我运行脚本时,它花了很长时间。 (实际上从未完成!)
有没有人碰巧知道我在这里做错了什么?
由于
答案 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或其他令人讨厌的内容,则会有此限制。如果你有干净的文件名,它应该可以工作。
我希望这会有所帮助。