매개변수를 스크립트에 전달한 다음 스크립트를 bsub에 대한 입력으로 리디렉션합니다.

매개변수를 스크립트에 전달한 다음 스크립트를 bsub에 대한 입력으로 리디렉션합니다.

현재 Platform LSF의 bsub 작업 제출 시스템을 사용하고 있습니다. 작업 스크립트를 제출해야 하는데 작업 스크립트에 매개변수를 전달하는 데 문제가 있습니다.

나에게 필요한 것은 다음과 같습니다. 작업 스크립트는 하나의 명령줄 인수가 있는 bash 스크립트입니다. 스크립트에 인수를 전달한 다음 bsub에 대한 입력으로 사용할 스크립트를 리디렉션해야 합니다. 문제는 해당 매개변수가 스크립트에 적용되지 않는다는 것입니다.

나는 시도했다:bsub < script.bsub 1

script.bsub는 내 스크립트이고 1은 숫자 매개변수입니다. 이 접근 방식은 작동하지 않습니다. 1은 bsub에 대한 인수로 처리됩니다.

또 다른 접근 방식: bsub < "script.bsub 1" 이 접근 방식을 사용하면 bsub는 큰따옴표로 묶인 전체 줄을 파일 이름으로 처리합니다.

먼저 명령줄 인수를 스크립트에 적용한 다음 인수를 사용하여 해당 스크립트를 입력으로 다른 프로그램으로 리디렉션하는 방법이 있습니까? bsub에 대한 경험이 있는 사람이라면 더 좋을 것 같습니다.

업데이트 및 해결 방법:

bsub 파일에 명령줄 매개변수를 적용하는 것은 매우 복잡한 과정인 것 같습니다. 아래에 설명된 HEREDOC 방법을 시도했지만 bsub는 스크립트 파일 이름이 명령인 것처럼 동작합니다. 따라서 이 문제를 해결하는 가장 쉬운 방법은 입력 리디렉션을 전혀 사용하지 않는 것입니다.

bsub에서 실행될 스크립트에 인수를 전달하려면 먼저 스크립트 파일이 아닌 명령줄에서 모든 bsub 인수를 지정하십시오. 그런 다음 다음을 사용하여 스크립트 파일을 실행하십시오.

"sh script.sh [arg]"

모든 bsub 매개변수 이후. 따라서 전체 줄은 다음과 같습니다.

bsub -q [queue] -J "[name]" -W 00:10 [other bsub args] "sh script.sh [script args]"

이것은 내 원래 질문에 대한 답은 아니지만 적어도 bsub의 경우 내 문제에 대한 가장 간단한 해결책입니다.

답변1

여기에는 문서가 필요하고 여기에는 문자열이 필요합니다.

bsub <<HEREDOC
    $(script.bsub 1)
HEREDOC

이것이 문서의 모습입니다. 쉘은 어떤 일이 발생한 줄을 <<HEREDOC찾을 때까지 발생한 줄 사이의 모든 확장을 읽고 HEREDOC파일 설명자 0 - stdin의 호출 명령에 출력을 전달합니다.

여기의 문자열은 원칙적으로 동일합니다.

bsub <<< script.bsub 1

사용하기가 더 간단해 보일 수도 있지만 더 혼란스럽기도 합니다.아니요휴대용 쉘 스크립트. here 문서는 POSIX 쉘 표준의 일부로 정의되어 있지만 here 문자열은 bash에서 작동하더라도 쉘 특정 구현입니다.

스크립트가 중단 없는 환경에서 실행되지 않을 것이라고 100% 확신할 수 없고 대화형 사용에만 이 문자열을 사용하지 않는 한 모든 스크립팅 상황에서 이 문서를 사용하는 것이 가장 좋습니다.

물론, 이들 중 하나라도 작동한다면 아마도 다음과 같을 것입니다:

script.bsub 1 | bsub

똑같이 할 것입니다. 이는 |pipe script.bsub의 표준 출력을 의 bsub표준 입력으로 변환하지만 bsub서브셸에서도 실행될 가능성이 높습니다. 어떤 방식으로든 현재 쉘 환경을 수정하는 경우 bsub(예: 쉘 변수 값 변경) 이것이 |pipe최선의 해결책이 아닐 수 있습니다.

답변2

bsub 파일에 명령줄 매개변수를 적용하는 것은 매우 복잡한 과정인 것 같습니다. mikeserv가 규정한 HEREDOC 방법을 시도했지만 bsub는 스크립트 파일 이름이 명령인 것처럼 동작합니다. 따라서 이 문제를 해결하는 가장 쉬운 방법은 입력 리디렉션을 전혀 사용하지 않는 것입니다.

내 질문은 특히 플랫폼 LSF의 bsub와 관련되어 있으므로 다음은 아마도 이런 종류의 인수 문제를 해결하는 가장 좋은 방법일 것입니다. bsub에서 실행될 스크립트에 인수를 전달하려면 먼저 스크립트 파일이 아닌 명령줄에서 수행하십시오. . 그런 다음 다음을 사용하여 스크립트 파일을 실행하십시오.

"sh script.sh [arg]"

모든 bsub 매개변수 이후. 따라서 전체 줄은 다음과 같습니다.

bsub -q [queue] -J "[name]" -W 00:10 [other bsub args] "sh script.sh [script args]"

이 경우 스크립트로 .bsub 파일을 사용하지 않고 일반 .sh 스크립트를 사용하고 Unix sh 명령을 사용하여 인수로 실행하는 것이 좋습니다.

관련 정보