Cod*_*lue 3 pipe chrome process-substitution
我正在使用以下命令但没有成功 -
$ google-chrome <(grep "simple" SimpleDoc.txt)
Run Code Online (Sandbox Code Playgroud)
如果我只是做 a grep
,我会得到 -
$ grep "simple" SimpleDoc.txt
Very simple doc that contains plaintext.
Run Code Online (Sandbox Code Playgroud)
我还写了一个 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()
Run Code Online (Sandbox Code Playgroud)
这是输出 -
$ showFileContents.py <(grep "simple" SimpleDoc.txt)
Very simple doc that contains plaintext.
Run Code Online (Sandbox Code Playgroud)
但是当我尝试做同样的事情时
$ google-chrome <(grep "simple" SimpleDoc.txt)
Run Code Online (Sandbox Code Playgroud)
浏览器窗口什么也没显示。使用 Firefox,我收到一条错误消息,提示“Firefox 找不到文件”。
为什么会发生这种情况以及如何使用 chrome 进行进程替换?
当您运行 时google-chrome
,该进程检测到有一个打开的 Chrome 实例并向其发送消息以打开该文件。该消息包含文件名。Firefox 以同样的方式工作。从 shell 启动的进程不是已经在运行的浏览器进程。
该<(…)
构造通过创建匿名管道来工作。它被传递给具有类似名称的命令/dev/fd/42
,意思是“已经在描述符 42 上打开的文件”。此文件只能由已开始执行命令行的进程访问,而不能由已在运行的浏览器进程访问。
为了将数据传递给正在运行的浏览器进程,数据必须在一个文件中,并且文件名可以被两个进程访问。在 Firefox 中,您可以使用命名管道:
mkfifo f
grep "simple" SimpleDoc.txt >f &
firefox f
rm f
Run Code Online (Sandbox Code Playgroud)
Chrome 似乎无法从管道中读取数据,因此您必须创建一个临时文件。您也可以为 Firefox 执行此操作。
在 zsh 中,variant process susbtitution 构造=()
会创建一个临时文件。
google-chrome =(grep "simple" SimpleDoc.txt)
Run Code Online (Sandbox Code Playgroud)
在 bash 中,您必须手动创建一个临时文件。
tmp=$(mktemp)
grep "simple" SimpleDoc.txt >$tmp
google-chrome "$tmp"
rm "$tmp"
Run Code Online (Sandbox Code Playgroud)
归档时间: |
|
查看次数: |
1780 次 |
最近记录: |