프로세스 대체를 사용하여 명령줄에서 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

관련 정보