2012-10-09 3 views
0

bash 쉘에서 실행할 때 제대로 작동하는 명령에서 gnu-parallel를 실행 중이지만 -c 플래그를 사용하여 병렬로 bash를 실행하면 오류가 반환됩니다. 이것은 내가 사용하고있는 특별한 globbing 표현식과 관련이 있다고 가정합니다.bash -c 및 Globbing 사용

ls !(*site*).mol2 

이것은 성공적으로 반환됩니다. 플래그와

명령이

/bin/bash -c 'ls !(*site*).mol2' 
/bin/bash: -c: line 0: syntax error near unexpected token `(' 

매뉴얼은 bash에 대한 -c 호출 문자열을 인수를 읽는 것을 지정하지 활성화, 내가 뭔가를 놓친 게 뭐죠?

편집 : 나는 내가 GNU 병렬 문자열에서 실행하려면이 필요 추가해야하기 때문에 최종 결과 명령은

답변

3

다음과 같은 시도해야 "어떤 명령"/ 빈/bash는 -c에 의해 실행 가능해야합니다 코드 :

bash <<EOF 
shopt -s extglob 
ls !(*site*).mol2 
EOF 

설명 : bash -c을 실행할 때

, 당신은 subshell 만들고, shopt 설정은 상속되지 않는다.

bash -O extglob -c 'ls !(*site*).mol2' 

See this thread

+0

당신은 단일 인용 문서 구분 여기에'bash는 사용할 수 있습니다 << 'EOF'' : 당신은 정말 하나의 라이너를해야하는 경우

편집

호출 셸이 특수 문자의 일부를 보간하지 않도록합니다. 아니면 원래의'bash -c' 접근 방식을 고수하고 명령 앞에'shopt -s extglob; '를 추가하면됩니다. – tripleee

+0

OP의 필요에 따라 다르지만 그 부분을 추가 할 것입니다. –

+0

@sputnick 그게 내가 원하는 것입니다. 그러나 Parallel의 기본 호출 명령 인/bin/bash -c에 인수를 추가하는 방법을 모르겠습니다. " – RussS