如何通过使用进程替换从命令行运行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中使用流程替换?

吉勒斯“别再邪恶了”

运行时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"

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章