bash를 사용하여 명령에 하위 프로세스를 전달하는 방법

bash를 사용하여 명령에 하위 프로세스를 전달하는 방법

여러 출력을 하나의 명령으로 파이프하기 위해 하위 프로세스를 사용하려고 합니다. 내 명령은 다음과 같습니다(축약된 버전).

cat "$1"
one=cat "$1"

의 출력은 command <(echo "foo")다음과 같습니다

foo
/dev/fd/63: Permission denied

작동 하므로 cat "$1"함수에 하위 프로세스의 출력을 읽을 수 있는 권한이 있다고 가정하지만 이를 변수에 넣으려고 하면 권한이 거부됩니다. 왜 이런 일이 발생하며 해결책이 있습니까?

답변1

귀하의 질문이 완전히 명확하지 않습니다. 하지만 x다음을 수행하는 명령이 있다고 생각합니다 .

cat "$1"
one=$(cat "$1")

이제 이렇게 하면 x <(echo "foo")오류가 발생합니다.

<(...)이는 구조가 작동하는 방식 때문입니다 .

기본적으로 실행되어 echo foo출력을 임시 파일 핸들( /dev/fd/63)에 연결한 다음 매개변수로 전달합니다.

이제 첫 번째 cat명령이 전체 입력을 읽습니다. 이는 입력이 남아 있지 않음을 의미합니다. 그래서 당신의두번째 cat명령에 읽을 내용이 없습니다. echo프로세스가 완료되었고 읽을 열려 있는 핸들이 없기 때문에 오류가 발생합니다 .

간단한 형태로 특별 버전을 완성했습니다.

echo "foo" | {
  cat
  one=$(cat)
}

그러나 독창적인 파일 처리 마법이 있습니다.

관련 정보