GNU Parallel을 사용하여 변수에 값을 할당하는 방법은 무엇입니까?

GNU Parallel을 사용하여 변수에 값을 할당하는 방법은 무엇입니까?

배정하려고 하는데변하기 쉬운사용GNU 병렬:

$ parallel --dry-run --xapply a{1}={2} ::: a b c ::: 5 6 7
aa=5
ab=6
ac=7

하지만 실행이 순조롭게 진행되지는 않는 것 같습니다.

$ parallel --xapply a{1}={2} ::: a b c ::: 5 6 7
$ echo $aa

$ echo $ab

$ echo $ac

비어 있는모든 경우에 가치가 있습니다.

무슨 일이 일어났고 어떻게 해야 해?값을 지정하다변수에 GNU Parallel을 사용하시나요?

더 많은 데이터:

  • 나는 GNU Parallel이 상위 프로세스로부터 변수를 상속받게 만드는 방법이 있다는 것을 알고 있지만, 이 경우 내가 원하는 것은 그 반대입니다.

답변1

셸 외부에서 셸에 변수를 설정할 수 없습니다(셸에서 시작된 프로세스 포함).예를 들어 사용자 공간에서 하위 항목에서 상위 항목으로 환경 변수를 전달할 수 있나요?

어쨌든 그것을 사용하는 데 많은 의미가 있을지 의심됩니다 parallel. 변수를 설정하는 데 시간이 오래 걸리는 것과는 다릅니다 ...

답변2

Stephen Kitt가 쓴 것처럼 자식에서 부모로 값을 전달하는 것은 불가능합니다. 즉, 그렇게 할 수 없습니다.아니요 부정 행위.

다행히도 GNU Parallel의 새 버전에는 먼저 활성화해야 하는 셸 함수가 포함되어 있습니다 parset.parset

$ . `which env_parallel.bash` # Replace bash with zsh, ksh, ash, dash, sh as needed
$ parset a,b,c echo ::: 5 6 7
$ echo $a
5

쉘이 배열을 지원하는 경우:

$ parset arr echo ::: 5 6 7
$ echo ${arr[1]}
5 (in zsh) 6 (otherwise)

Stephen Kitt가 말했듯이 이는 단순히 숫자 값을 할당하는 것보다 훨씬 느립니다. 하지만 귀하의 예는 MCVE일 뿐이므로 실제 상황은 훨씬 더 복잡해지기 때문에 병렬로 실행해야 할 수도 있습니다.

관련 정보