답변:
parallel
(가에 의해 결정된다 쉘있는 이미 쉘에서 명령을 실행 parallel
합니다 (하나와 같은 쉘을 호출하는 것을 의도 추론을 사용하여 parallel
호출 에서를 ). 당신은 설정할 수 있습니다 $PARALLEL_SHELL
쉘을 고정 변수).
이것은 당신이 전달하는 명령이 아니라 또는 명령에 parallel
대한 것과 같지만 쉘 명령 행 ( 명령에 대한 것과 동일 )입니다.env
xargs
eval
대해 원하는 eval
에서 parallel arg1 arg2
, parallel
(가가되도록 사이에 공백 이러한 인자들을 연결된다 arg1 arg2
), 그 문자열로 전달된다 <the-shell> -c
.
parallel
의 stdin 에 전달 된 인수의 경우 parallel
특정 쉘에서 예상되는 형식으로 따옴표를 인용하십시오 (어려우며 오류가 발생하기 쉬운 작업이므로 parallel
Changelog 에서 수정 된 버그가 많이 있습니다. 일부 는 여전히 2017-03-06)으로 수정되지 않았으며 해당 명령 줄에 추가됩니다.
예를 들어, within bash
에서 호출 하면
echo "foo'bar" | parallel echo foo
명령 줄 bash -c
과 병렬 호출 을 echo foo foo\'bar
합니다. 그리고 만약 내에서 호출 rc
(또는과 PARALLEL_SHELL=rc
) rc -c
와 echo foo foo''''bar
.
당신의 :
parallel bash -c 'echo :\$1' '' {}
parallel
다음과 같은 주장을 연결합니다.
bash -c echo :$1 {}
과 그리고 {}
당신이 전화하는거야 쉘에 대한 올바른 형식으로 확장 및 인용 parallel
에서,에 있음을 전달 <that-shell> -c
하는 호출 bash -c echo
과 :$1
에서 $0
하고있는 현재 인수 $1
.
parallel
작동 방식 이 아닙니다 . 여기, 아마도 당신은 원할 것입니다 :
printf '1\n2\n' | PARALLEL_SHELL=bash parallel 'echo :{}'
무엇을하는지 확인하기 위해 parallel
아래에서 strace -fe execve
(또는 Linux가 아닌 경우 시스템에서) 실행할 수 있습니다 .
여기서 기대하는 것에 더 가깝게 처리하는 xargs
대신 GNU 를 사용할 수 있습니다 parallel
.
printf '1\n2\n' | xargs -rn1 -P4 bash -c 'echo ":$1"' ''
https://lists.gnu.org/archive/html/bug-parallel/2015-05/msg00005.html 의 토론도 참조 하십시오.
에서 인라인 스크립트에 빈 문자열을 bash -c 'echo foo' '' foo
만들고 있음에 유의하십시오 $0
. $0
오류 메시지에도 사용 되므로 피하십시오 . 비교:
$ bash -c 'echo x > "$1"' '' /
: /: Is a directory
와.
$ bash -c 'echo x > "$1"' bash /
bash: /: Is a directory
또한 따옴표없는 변수를 남겨두면 매우 특별한 의미 bash
가 echo
있으며 일반적으로 임의의 데이터에는 사용할 수 없습니다.