프로세스 대체를 사용하여 명령줄에서 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가 파일을 찾을 수 없습니다"라는 오류가 발생합니다.

왜 이런 일이 발생하며 크롬으로 프로세스 대체를 어떻게 사용할 수 있나요?

답변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

관련 정보