환경 변수를 설정하거나 기능을 정의하는 명령을 백그라운드에서 실행합니다.

환경 변수를 설정하거나 기능을 정의하는 명령을 백그라운드에서 실행합니다.
> export foo=1 &
[1] 9016
[1] + done      export foo=1
> echo $foo

>

명령을 실행하면 &새 프로세스가 생성되고 export foo=1환경 변수가 상위 셸에 설정되지 않는다는 것을 알고 있습니다. 그러나 이것이 가능합니까?

특히 저는 Node와 js 명령 실행 및 grunt 및 gulp와 같은 동적 완료 설정과 같은 많은 패키지를 개발하고 있습니다. 너무 느립니다.

비슷한 걸 만들 생각이에요자동 환경. 디렉토리에 들어가면 백그라운드에서 js 명령이 실행되고 설정이 완료되며 변경 되면 다시 실행됩니다 Gruntfile.js.gulpfile.js

그렇다면 명령을 비동기적으로 실행하고 명령 끝 부분에 환경 변수와 함수를 정의하려면 어떻게 해야 합니까?

답변1

엄밀히 해석하면 자신이 하고 싶은 일은 불가능하다. 그래서 문제는 이와 같은 일을 성취하기 위해 얼마나 많은 부정 행위를 해야 하느냐는 것입니다. bash, PROMPT_COMMAND 및 두 개의 임시 파일이 필요합니다. 또한 백그라운드 작업이 완료될 때까지 명령이 셸을 업데이트하지 않는다는 점을 수락해야 합니다. 또한 필요에 따라 긴 작업만 실행하려면 백그라운드 프로세스에서 make를 사용하는 것이 좋습니다.

먼저 이벤트 후크를 설정하십시오.

PROMPT_COMMAND='[[ -e file2 ]] && { . file2; rm file2 }'

그런 다음 백그라운드 프로세스를 닫습니다.

(echo export foo=1 > file1 && mv file1 file2 )&

mv? file2가 있다는 것은 작업이 완료되었고 파일을 구문 분석할 수 있음을 나타내므로 file1을 천천히 빌드할 수 있습니다.

관련 정보