나는 사용하려고GNU 병렬상수 및 가변 매개변수의 조합을 사용하여 공통을 여러 번 실행합니다. 하지만 어떤 이유에서든 parallel
.
이 예에서는 상수 매개변수가 'a b'
두 개의 매개변수 대신 단일 매개변수로 전달되어야 합니다.debug-call
$ parallel debug-call 'a b' {} ::: {1..2}
[0] = '[...]/debug-call'
[1] = 'a'
[2] = 'b'
[3] = '1'
[0] = '[...]/debug-call'
[1] = 'a'
[2] = 'b'
[3] = '2'
debug-call
는간단한 스크립트에 전달된 모든 매개변수를 인쇄합니다 argv
. 대신 다음 출력을 보고 싶습니다.
[0] = '[...]/debug-call'
[1] = 'a b'
[2] = '1'
[0] = '[...]/debug-call'
[1] = 'a b'
[2] = '2'
이것은 버그입니까, 아니면 GNU Parallel이 명령줄 인수를 명령에 전달하기 전에 분할하는 것을 방지하는 옵션이 있습니까?
답변1
parallel
인수 연결을 구문 분석하기 위해 쉘(호출되는 컨텍스트에 따라 다르지만 일반적으로 쉘에서 호출될 때 동일한 쉘임)을 실행합니다.
그래서:
parallel debug-call 'a b' {} ::: 'a b' c
동일합니까?
parallel 'debug-call a b {}' ::: 'a b' c
parallel
알림을 받을 예정:
your-shell -c 'debug-call a b <something>'
<something>
(희망적으로) 쉘의 매개변수가 올바르게 인용되었습니다. 예를 들어, 쉘이 이면 bash
실행됩니다.
bash -c 'debug-call a b a\ b'
원하는 곳은 다음과 같습니다.
parallel 'debug-call "a b" {}' ::: 'a b' c
또는
parallel -q debug-call 'a b' {} ::: 'a b' c
연결하기 전에 parallel
(셸의 올바른(희망적으로) 구문에서) 매개변수를 인용할 위치는 어디입니까 ?
xargs
쉘을 먼저 호출하지 않으려면 대신 GNU를 사용할 수 있습니다 .
xargs -n1 -r0 -P4 -a <(printf '%s\0' 'a b' c) debug-call 'a b'
이는 셸(또는 초기화 시 실행되는 명령)을 호출하지 않지만 를 사용한 출력 재정렬과 같은 parallel
추가 기능의 이점은 없습니다 .parallel
-k
다음에서 다른 방법을 찾을 수 있습니다.백그라운드 병렬 실행