백그라운드에서 두 가지 관련 명령 실행

백그라운드에서 두 가지 관련 명령 실행

백그라운드에서 두 개의 명령을 실행해야 합니다.

function "$arg1" "$agr2" arg3 && declare "workspaces=$arg3"

먼저 완료되면 함수를 실행한 다음 작업 공간에서 arg3을 초기화하고(전역 변수) 전체 프로세스가 백그라운드에서 실행되어야 합니다.

나는 노력했다

function "$arg1" "$agr2" arg3 && declare "workspaces=$arg3" & //this didn't work
(function "$arg1" "$agr2" arg3 && declare "workspaces=$arg3") & //niether this

이 경우 작업공간이 초기화되지 않기 때문에 두 가지를 동시에 실행하고 싶지 않습니다.

답변1

나는 당신이 겪고 있는 문제는 $workspaces함수의 결과로 전역 변수가 설정되기를 기대한다는 것입니다. 그러나 export하위 쉘에서 현재 쉘에 전역 변수(쉘 용어로)를 설정할 수는 없습니다. 백그라운드에서 명령을 실행하는 유일한 방법은 하위 쉘에서 실행하는 것입니다. 따라서 백그라운드 명령을 실행 declare하거나 export일부로 실행하면 현재 셸에서 변수가 설정되지 않습니다. 이는 달성하려는 것으로 보입니다.

답변2

나는 당신이 무엇을 하고 싶은지 잘 모르겠습니다.

parset내 생각엔 GNU Parallel을 솔루션의 일부로 사용할 수 있을 것 같습니다 .

# Activate parset
. `which env_parallel.bash`

export -f myfunction
parset myresult -j0 myfunction {} ::: arg1 arg2 arg3
echo "${myresult[0]}"
echo "${myresult[1]}"
echo "${myresult[2]}"

그러면 다음 명령이 병렬로 실행됩니다.

myfunction arg1
myfunction arg2
myfunction arg3

그리고 각각의 출력을 배열에 넣습니다 myresult.

관련 정보