Intereting Posts
bash не устанавливает autocd Как отключить пароль блокировки экрана, но сохранить экран блокировки? Сценарий оболочки для перемещения файлов, если определенный процент строк содержит определенную строку Как я могу нажать клавишу Windows с помощью xdotool Instaling Linux на машине с Asrock Z87 Extreme 6 Как я могу видеть перемещенные строки в сравнении файлов с vimdiff / diff? Как установить g ++ 4.8 для установки по умолчанию после установки? Команда чтения: как проверить, что пользователь набрал что-то Как перечислить существующий псевдоним для определенного пользователя Linux? Kali Linux live usb persistance Как я могу перечислить все установленные программы пользователями? Правый часовой пояс – неправильное время – DST (Debian) Нет руководства для git Как копировать необработанные изображения qemu? как вставить файл в другой файл (повернуть один), но один под другим?

Как запустить chrome из командной строки с помощью замены процесса?

Я использую следующую команду без успеха –

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

Если я просто сделаю 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 не может найти файл».

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

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

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

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

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

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

    В zsh конструктор susbtitation construct =() создает временный файл.

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

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

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

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

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