2016-07-21 3 views
1

bash 스크립트에서 정수 변수를 사용하여 (qsub를 사용하여) Sun Grid Engine에 제출하려고합니다. 누군가가 이것이 작동하지 않는 이유를 분명히 할 수 있습니까? Sun Grid Engine으로 bash 스크립팅을 알아 내려고 시도했습니다.

#$ -pe mpi $NUMCORES

NUMCORES=32

는 (오류가 있습니다 "오류로 인해 스크립트 파일을 읽을 수 없습니다 :! 유효하지 않은 수치 값을 문자열의 초기 부분"$ NUMCORES "어떤 진수가 포함되어 있지 않습니다)

하지만 :

#$ -pe mpi 32 

몇 가지 해결책을 살펴 보았습니다. awk 또는 BC를 포함하지만 작동하게 만들 수는 없습니다. 분명히 나는 ​​bash 스크립팅을 처음 접했습니다 - 어떤 도움을 주셔서 감사합니다!

+0

정말 bash 스크립트입니까? 첫 번째 줄은 무엇입니까? * "$ NUMCORES의 초기 부분에는 십진수가 포함되어 있지 않습니다"* 무엇을 의미합니까? 후속 부분에는 십진수가 포함됩니까? 정확하게 '32'가 포함 된 것으로 표시하거나 완전히 진실하지 않습니까? –

+1

같은 스크립트입니까, 아니면 'NUMCORES = 32 내보내기'가 누락 되었습니까? –

답변

1

bash 스크립트의 # 문자는 주석을 표시합니다. 따라서 행 #$ -pe mpi $NUMCORES에서 environement 변수 NUMCORES의 값은 주석이므로 사용되지 않습니다.

그러나이 주석은 qsub 명령에 매개 변수를 전달하는 데 유용합니다. 예를 들어 the man pagethese examples을 참조하십시오. 이러한 매개 변수는 명령 줄에서 전달할 수 있습니다.

qsub -pe mpi 32 myjob.sh 

대신 qsub보다 먼저 명령을 사용하여 작업을 생성 할 수 있습니다. 이제 작업 스크립트 jobgeneric.sh가 있다고 가정 해 봅시다 :

export NUMCORES=32 
sed 's/$NUMCORES/'$NUMCORES'/g' jobgeneric.sh > job.sh 
cat job.sh 

Environment variable substitution in sed 참조 :

#!/bin/bash 
#$ -N useless 
#$ -cwd 
#$ -pe mpi $NUMCORES 
#$ -l h_vmem=6G 

echo 42 

가의 환경 변수를 대체 할 새 파일 job.sh을 만들 수 sed command을 사용하자. 결과는 다음과 같습니다

#!/bin/bash 
#$ -N useless 
#$ -cwd 
#$ -pe mpi 32 
#$ -l h_vmem=6G 

echo 42 

이제 작업이 qsub job.sh를 사용하여 전송 될 수있다!

+0

감사합니다. francis. 필자는 파이썬을 사용하여 스크립트를 생성하기 전에 코어와 다른 매개 변수를 지정하는 비슷한 접근 방식을 취했다. 그런 다음 스크립트가 자동으로 대기열에 제출됩니다. – notadoctorthathelpspeople

관련 문제