Vamos quebrar isso. Primeiro, o formato $(command)
é chamado de "substituição de comando" . É uma maneira de retornar a saída de um comando, criando essencialmente uma variável cujo valor é a saída desse comando. Por exemplo:
$ echo foo
foo
$ var=$(echo foo) ## set the output of 'echo foo' to the variable $var
$ echo "$var"
foo
Agora, neste caso, o comando que está sendo executado é grep -irl crud /usr/src/linux-2.4
. Para entender o que isso significa, execute man grep
e veja o que cada uma dessas três opções ( i
, r
e l
) faz:
-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.
Considerados todos juntos, isso significa "recorrer a todos os arquivos em /usr/src/linux-2.4
e pesquisar em cada um deles sem distinção entre maiúsculas e minúsculas para a palavra crud
e, em seguida, imprimir os nomes de quaisquer arquivos correspondentes".
Então, esse comando irá imprimir uma lista de nomes de arquivos contendo a palavra crud
. Como estamos executando file $(grep . . . )
, isso significa que o comando file
(que imprime o tipo de arquivo e algumas informações sobre o arquivo em questão) será executado em cada um dos arquivos retornados pelo grep
.
Juntando tudo, esse comando imprimirá as informações básicas sobre todos os arquivos em /usr/src/linux-2.4
contendo a string crud
. Na minha máquina 14.04, isso retorna:
$ 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