Как запустить Chrome из командной строки, используя подстановку процессов?

Как запустить Chrome из командной строки, используя подстановку процессов?

Я использую следующую команду, но безуспешно -

$ google-chrome <(grep "simple" SimpleDoc.txt)

Если я просто сделаю a grep, я получу -

$ grep "simple" SimpleDoc.txt
Very simple doc that contains plaintext. 

Я также написал скрипт на Python, вызываемый showFileContents.pyдля проверки подстановки процессов, и он работает -

#! /usr/bin/python

import sys

arg1 = sys.argv[1]
f = open(arg1)
line = f.readline()

while line:
    sys.stdout.write(line)
    line = f.readline()

f.close()

Вот что получилось -

$ showFileContents.py <(grep "simple" SimpleDoc.txt)
Very simple doc that contains plaintext.

Но когда я пытаюсь сделать то же самое с

$ google-chrome <(grep "simple" SimpleDoc.txt)

окно браузера ничего не показывает. С Firefox я получаю ошибку, говорящую, что "Firefox не может найти файл".

Почему это происходит и как использовать замену процессов в Chrome?

решение1

При запуске google-chromeпроцесс обнаруживает, что есть открытый экземпляр Chrome и отправляет ему сообщение для открытия файла. Сообщение содержит имя файла. Firefox работает таким же образом. Процесс, запущенный из оболочки, не является уже запущенным процессом браузера.

Конструкция <(…)работает, создавая анонимный канал. Он передается команде с именем типа /dev/fd/42, что означает «файл, который уже открыт на дескрипторе 42». К этому файлу может получить доступ только процесс, запущенный для выполнения вашей командной строки, а не уже запущенный процесс браузера.

Чтобы передать данные запущенному процессу браузера, данные должны находиться в файле с именем, к которому оба процесса могут получить доступ. С Firefox вы можете использовать именованный канал:

mkfifo f
grep "simple" SimpleDoc.txt >f &
firefox f
rm f

Chrome, похоже, не может читать из конвейера, поэтому вам придется создать временный файл. Вы могли бы сделать это и для Firefox.

В zsh конструкция подстановки процесса варианта =()создает временный файл.

google-chrome =(grep "simple" SimpleDoc.txt)

В bash вам придется вручную создать временный файл.

tmp=$(mktemp)
grep "simple" SimpleDoc.txt >$tmp
google-chrome "$tmp"
rm "$tmp"

решение2

Что ж, у вас всегда есть возможность:

grep "simple" SimpleDoc.txt > delme.txt; google-chrome delme.txt

Связанный контент