如何使用进程替换从命令行运行 chrome?

如何使用进程替换从命令行运行 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 找不到该文件”。

为什么会发生这种情况以及如何使用 chrome 进行进程替换?

答案1

当您运行时google-chrome,该进程会检测到有一个打开的 Chrome 实例,并向其发送一条消息以打开该文件。该消息包含文件名。火狐浏览器以同样的方式工作。从 shell 启动的进程不是已经运行的浏览器进程。

<(…)构造通过创建匿名管道来工作。它被传递给名称类似于 的命令/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

相关内容