Pode-se usar vários documentos aqui para fornecer entrada para um comando no bash?
$ cat <<<foo <<<bar
bar
$ cat <<EOF1 <<EOF2
> foo
> EOF1
> bar
> EOF2
bar
Obviamente, em ambos os casos, o segundo documento aqui é usado como stdin e substitui a primeira referência. A solução echo
é usar s em vez disso?
$ cat <(echo -n foo) <(echo bar)
foobar
Além disso, por algum motivo, o uso de uma combinação não funcionou para mim. Por que isso seria?
$ cat <<<foo <(echo bar)
bar
$ cat <(echo -n foo) <<<bar
foo
bash
io-redirection
here-document
Sparhawk
fonte
fonte
paste
com entradas falsas. Suponho que posso pensar em alguns outros cenários. Se eu tivesse um script com texto pré-manipulado em algumas variáveis, talvez eu queira fazer algo para ambos com um comando que usa apenas arquivos, por exemplodiff
.cat <<EOF1 <<"EOF2"
.Respostas:
Você pode fazer:
Pode haver apenas um stdin, pois há apenas um descritor de arquivo 0.
é a abreviação de:
E:
é:
Você deve decidir o que abrir no descritor de arquivo 0.
É:
Onde
123
está um descritor de arquivo para um canal e, paralelamente, o bash é executadoecho foo
em outro processo com o stdout redirecionado para a outra extremidade do canal.Depois de passar um nome de arquivo para
cat
,cat
não leia mais do stdin. Você precisaria de:Ou:
(
-
é dizercat
para ler de stdin).fonte
cat <<EOF
não é exatamente o mesmo quecat /dev/fd/0...
: no último caso,cat
vê o nome do arquivo e abre.cat
lê seufd
0, como se tivesse passado um argumento de (-
ou apenas/dev/fd/0
no Linux (e Linux)), a abertura/dev/fd/0
não é exatamente como duplicar o descritor de arquivo 0)./dev/fd/3 3<< E1
construção e agora me pergunto o que exatamente são os itens em / dev / fd /. Embora eles de alguma forma pareçam mágicos após o processo abrir um arquivo em algum lugar do sistema de arquivos, com a exceção de 1 e 2, que existem por padrão para todos os processos. Mas, no seu exemplo, você está usando o descritor de arquivo 3 e 4 que não está conectado a nenhum arquivo real, exceto pelo redirecionamento de entrada. Não consigo compreender isso no meu modelo mental de descritores de arquivos. E se o processo quiser abrir outro arquivo, ele saberia que precisa usar o fd 5? Fds tem que ser 3, 4, 5 .. ou pode ser qualquer coisa?