我有这个简单的bash脚本: 我在参数中传递的每个文件上运行ns模拟器,其中最后一个参数是要搜索的文本字符串。
#!/bin/bash
nsloc="/home/ashish/ns-allinone-2.35/ns-2.35/ns"
temp="temp12345ashish.temp"
j=1
for file in "$@"
do
if [ $j -lt $# ]
then
let j=$j+1
`$nsloc $file > $temp 2>&1`
if grep -l ${BASH_ARGV[0]} $temp
then
echo "$file Successful"
fi
fi
done
我期待:
file1.tcl Successful
我得到了:
temp12345ashish.temp
file1.tcl Successful
当我在终端上运行模拟器命令时,我没有得到输出所针对的文件名。
我没有从第一行输出的打印位置开始。 请解释一下。
提前致谢。
答案 0 :(得分:3)
请参阅man grep
,并详细了解-l
选项的说明。
在您的脚本(上图)中,您正在使用-l
,因此grep会告诉您(按照指示)发生匹配的文件名。
如果您不想查看文件名,请不要使用-l
,也不要使用-q
。例如:
grep -ql ${BASH_ARGV[0]} $temp
答案 1 :(得分:0)
沉默一下grep:
if grep -l ${BASH_ARGV[0]} $temp &> /dev/null