Temos duas coisas semelhantes, mas diferentes
-
Um pipeline
echo "hello world" | cat # This is a pipeline
Os operadores de controle de canal (
|
e|&
) conectam a saída de um comando à entrada da seguinte no pipeline. Portanto, o primeiro exemplo funciona , a saída do comandoecho
, "Hello word", está conectada com a entrada do seguinte comandocat
, que assume a entrada padrão como arquivo de entrada mais especificado. Na verdade, podemos ler a partir deman cat
:cat - concatenate files and print on the standard output
e abaixo do exemplo com a simples invocação de
cat
cat Copy standard input to standard output
-
Um redirecionamento, ou melhor, uma tentativa de redirecionamento de entrada
<
cat < echo "hello world" # This is an attempt of redirection
Nesse caso, o comando
cat
está recebendo sua entrada da entrada padrão que você redireciona com o operador<
do arquivo à direita de<
... ou seja não é um arquivo. Isso é porque não funciona .Da seção de redirecionamento do
man bash
Redirecting Input
Redirection of input causes the file whose name results from the expansion of word to be opened for reading on file descriptor n, or the standard input (file descriptor 0) if n is not specified. -
No bash funciona por diferentes razões
-
cat <(echo "hello world")
Substituição do processoProcess substitution is supported on systems that support named pipes (FIFOs) or the /dev/fd method of naming open files. It takes the form of
<(list)
or>(list)
. The process list is run with its input or output connected to a FIFO or some file in/dev/fd
. The name of this file is passed as an argument to the current command as the result of the expansion. If the>(list)
form is used, writing to the file will provide input for list. If the<(list)
form is used, the file passed as an argument should be read to obtain the output of list. -
cat <<< $(echo "hello world")
aqui stringsThe word undergoes brace expansion, tilde expansion, parameter and variable expansion, command substitution, arithmetic expansion, and quote removal. Path-name expansion and word splitting are not performed. The result is supplied as a single string to the command on its standard input.
-
Referências
-
man bash
e procura por redirecionamento , pipeline , Aqui Strings e Processo de substituição -
man cat
só porque usamos ...