자체 변수 범위를 사용하여 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'