“文件 $(grep –irl crud /usr/src/linux-2.4)”是什么意思?

“文件 $(grep –irl crud /usr/src/linux-2.4)”是什么意思?

有人可以解释一下 crud 是什么以及 grep 在这种情况下究竟是如何工作的吗?

file $(grep –irl crud /usr/src/linux-2.4)

答案1

让我们来分析一下。首先,这种$(command)格式称为“命令替换”。它是一种返回命令输出的方式,本质上是创建一个变量,其值是该命令的输出。例如:

$ echo foo
foo
$ var=$(echo foo) ## set the output of 'echo foo' to the variable $var
$ echo "$var"
foo

现在,在本例中,运行的命令是grep -irl crud /usr/src/linux-2.4。要理解这意味着什么,请运行man grep并查看这三个(irl)选项的作用:

   -i, --ignore-case
          Ignore case distinctions in  both  the  PATTERN  and  the  input
          files.

   -r, --recursive
          Read all files  under  each  directory,  recursively,  following
          symbolic  links only if they are on the command line.  Note that
          if  no  file  operand  is  given,  grep  searches  the   working
          directory.  This is equivalent to the -d recurse option.

   -l, --files-with-matches
          Suppress normal output; instead print the  name  of  each  input
          file  from  which  output would normally have been printed.  The
          scanning will stop on the first match.

总而言之,这意味着“递归遍历所有文件/usr/src/linux-2.4并在每个文件中不区分大小写地搜索单词crud,然后打印任何匹配的文件的名称”。

因此,该命令将打印包含单词 的文件名列表crud。因为我们正在运行file $(grep . . . ),这意味着该命令file(打印出文件类型和有关该文件的一些信息)将在 所返回的每个文件上运行grep

综上所述,该命令将打印出包含/usr/src/linux-2.4字符串的所有文件的基本文件信息crud。在我的 14.04 机器上,该命令返回:

$ file $(grep -irl crud /usr/src/)
/usr/src/linux-headers-3.16.0-77/include/linux/pktcdvd.h:                   C source, ASCII text
/usr/src/linux-headers-3.16.0-77/arch/arm/mach-sa1100/include/mach/cerf.h:  ASCII text
/usr/src/linux-headers-3.13.0-108/include/linux/pktcdvd.h:                  C source, ASCII text
/usr/src/linux-headers-3.13.0-108/arch/arm/mach-sa1100/include/mach/cerf.h: ASCII text
/usr/src/linux-headers-3.13.0-46/include/linux/pktcdvd.h:                   C source, ASCII text
/usr/src/linux-headers-3.13.0-46/arch/arm/mach-sa1100/include/mach/cerf.h:  ASCII text
/usr/src/linux-headers-3.16.0-30/include/linux/pktcdvd.h:                   C source, ASCII text
/usr/src/linux-headers-3.16.0-30/arch/arm/mach-sa1100/include/mach/cerf.h:  ASCII text

答案2

file根据帮助,确定所处理文件的类型。命令$(grep -irl crud /usr/src/linux-2.4)为:

  • $(<command>)捕获内部命令的值。
  • grep -irl crud /usr/src/linux-2.4,是内部命令,它递归搜索字符串 crud(忽略大小写),并仅打印包含匹配项的文件的名称。

因此,完整的命令是在目录内查找与字符串 crud 匹配的文件类型/usr/src/linux-2.4

相关内容