작업 제어 하에 별도의 변수 범위 생성 명령

작업 제어 하에 별도의 변수 범위 생성 명령

자체 변수 범위를 사용하여 bash 또는 기타 sh 파생 셸의 명령줄에서 포그라운드로 명령 목록을 실행할 수 있습니다(따라서 해당 범위 내의 변수에 할당된 모든 값은 해당 범위 외부에서 알 수 없습니다). 및 - 배경 명령이 생성된 경우 - 배경 명령은 여전히 ​​상위 셸 아래의 작업입니까, 즉 여전히 명령줄 셸의 작업 제어 하에 있습니까? 이를 수행하는 방법이 두 가지 이상인 경우 실제로 가장 짧은 방법은 무엇입니까?

괄호를 사용하면 자체 범위를 가진 새 하위 쉘이 생성되지만 생성된 모든 백그라운드 명령은 더 이상 쉘의 작업 제어에 속하지 않는다는 것을 이해합니다.

답변1

에서는 zsh익명 함수를 사용할 수 있지만 여전히 변수를 local.

예를 들어:

$ () { local t; for t in 100 200 300; do sleep $t & done; }
[2] 4186
[3] 4187
[4] 4188
$ jobs
[2]    running    sleep $t
[3]  - running    sleep $t
[4]  + running    sleep $t
$ typeset -p t
typeset: no such variable: t

함수 로컬 범위를 지원하는 모든 셸의 경우 다음과 같은 일반 함수를 사용할 수 있습니다.

run() { eval "$@"; }

그 다음에:

run 'local t; for t in 100 200 300; do sleep "$t" & done'

관련 정보