Z-shell에서 하위 프로세스 결과 캡처

Z-shell에서 하위 프로세스 결과 캡처
AAA <options>; CCC AAA <options>

AAA, CCC다른 명령입니다.

여기 zsh 스크립트가 있습니다. 예를 들면 다음과 같습니다.

vi script.zsh
<...>
AAA <options>; CCC AAA <options>
<...>

세부 사항: 내가 틀렸다면 CCC AAA <options>정정 AAA <options>하십시오. 하위 쉘이 사용된 다음 현재 쉘에서 별도의 프로세스가 생성되거나 현재 쉘이 사용되고 프로세스에서 하위 프로세스가 생성될 수 있습니다. 현재 스크립트를 실행 중입니다.

문제는 완성 CCC후에도 살아남는다 는 점이다. script.zsh이로 인해 반환 값 대신 결과를 호출하려고 할 때 문제가 발생합니다. (완료된 후에 무언가를 생성합니다. ie에 대해 새로 생성된 객체입니다. CCC AAA <options>)AAA <options> ~에 script.zshnot found경고를 발생시킵니다 .

그런데 script.zsh현재 결과를 어떻게 볼 수 있습니까 'AAA <options>'?

가능하다면 Z 쉘을 목표로 삼으세요.

편집: 다음과 같아야 합니다.

AAA <options>; CCC AAA <options>

답변1

아니요,

CCC 'AAA <options>'

CCC리터럴 매개변수로 시작합니다 AAA <options>. 모든 껍질은 동일합니다. echo대신 다음 명령을 사용할 수 있습니다 CCC.

$ echo 'AAA <options>'
AAA <options>

CCC출력(후행 개행 없이)을 AAA단일 인수 로 호출 하려면 다음을 수행할 수 있습니다.

CCC "$(AAA <options>)"

CCC출력에 가능한 한 많은 단어(공백, 탭, 줄 바꿈, NUL 구분 기호)를 사용하여 호출 하려면 AAA다음을 수행할 수 있습니다.

CCC $(AAA <options>)

그럼에도 불구하고 return CCC전에는 시작되지 않으며 AAA스크립트는 CCCreturn 전에 종료되지 않습니다.

명령이 반환되기 전에 스크립트를 종료하려면 다음과 같이 명령을 비동기적으로 시작해야 합니다.

CCC args &

어쨌든 이것은 모든 쉘에서 동일하며 zsh구체적이지 않습니다(위의 NUL 분할을 제외하고).

관련 정보