为什么grep显示命令作为输出的一部分?

时间:2014-02-26 05:32:50

标签: bash grep find

我编写了一个bash脚本,可以在我们的脚本目录中找到任何可执行文件,然后对生成的文件执行grep以显示描述(如果它包含在文件中)。

“description”在每个文件中标识为以“#DESC:”开头的行

由于某种原因,该脚本还包括正在运行的grep命令(但只运行一次)。有谁知道这是为什么?

脚本和输出如下所示。为什么输出中的第二行会发生?

脚本

#!/bin/bash

# Find any FILES that are EXECUTABLE in the SCRIPTS 
# directory and display any description, if there is one

find /opt/scripts/. -perm -111 -type f -maxdepth 1 | while read line ;
do
 file=$(basename "$line")
 printf "\033[1m%10s\033[0m : " $file
 grep "# DESC:"  "$line" | cut -c 9-
done

输出

      desc : Displays all the scripts and their descriptions
 DESC:"  "$line" | cut -c 9-
  showhelp : Displays the script help file
      test : Script to perform system testing

1 个答案:

答案 0 :(得分:0)

原因

大概你的grepping脚本也在/ opt / scripts?

所以它找到了自己,并找到了grep主题'#DESC'并打印出来。

您可以通过在grep脚本的顶部添加#DESC行来解决这个问题,并使用'grep -m1'输出每个grep找到的第一个结果

grep -m1 '# DESC' "$line" | cut -c 9-

<幽默>否则它只是乌龟一直下来... ;-)< / humor>

替代修复

您还可以使用正则表达式并锚定到行的开头来改进grep:

egrep -m1 '^# DESC' "$line" | cut -c 9-