Quando você executa google-chrome
, o processo detecta que há uma instância aberta do Google Chrome e envia uma mensagem para abrir o arquivo. A mensagem contém o nome do arquivo. O Firefox funciona da mesma maneira. O processo iniciado a partir do shell não é o processo do navegador já em execução.
A construção <(…)
funciona criando um canal anônimo. Ele é passado para o comando com um nome como /dev/fd/42
, significando “o arquivo que já está aberto no descritor 42”. Este arquivo só pode ser acessado por um processo que foi iniciado para executar sua linha de comando, não pelo processo do navegador já em execução.
Para passar os dados para o processo do navegador em execução, os dados devem estar em um arquivo, com um nome que ambos os processos possam acessar. Com o Firefox, você pode usar um pipe nomeado:
mkfifo f
grep "simple" SimpleDoc.txt >f &
firefox f
rm f
O Chrome não parece conseguir ler de um canal, por isso você precisa criar um arquivo temporário. Você também pode fazer isso para o Firefox.
Em zsh, o constructo de substituição de processo variante =()
cria um arquivo temporário.
google-chrome =(grep "simple" SimpleDoc.txt)
No bash, você precisa criar um arquivo temporário manualmente.
tmp=$(mktemp)
grep "simple" SimpleDoc.txt >$tmp
google-chrome "$tmp"
rm "$tmp"