공유 SLURM 클러스터를 사용하고 있습니다. 스크립트 자체 내에서 bash 스크립트의 경로를 얻으려고 합니다.
여기에 이미 훌륭한 스레드가 있습니다.https://stackoverflow.com/questions/59895/get-the-source-directory-of-a-bash-script-from-within-the-script-itself. 불행히도 이러한 솔루션 중 어느 것도 나에게 효과적이지 않았습니다. bash 스크립트를 정상적으로 실행할 때는 작동하지만 스크립트를 작업으로 제출할 때는 작동하지 않습니다. 나는 $BASH_SOURCE
, , 및 을 시도했습니다. 그들은 모두 비슷한 것을 반환하는데, 이는 SLURM에 의해 자동으로 생성된 경로이며 내가 제출한 스크립트와 아무 관련이 없습니다. 아직 언급하지 않은 질문에 직접적으로 답할 수 있는 다른 솔루션이 있는지 의심스럽습니다. 하지만 클러스터가 수행하는 작업을 재정의할 수 있는 방법이 있습니까? 어떻게든 표준 bash 동작을 복원할 수 있나요?$0
$_
readlink /proc/$$/fd/255
/cm/local/apps/slurm/var/spool/jobXXXXXX/slurm_script
답변1
댓글로 문제가 해결되었습니다.
요약하자면, 원래 문제를 올바르게 진단하지 못한 것으로 나타났습니다. SLURM은 수정하지 않았 $BASH_SOURCE
거나 $0
... 그냥 스크립트를 실행한 줄 알았는데 실제로는 새 위치( /cm/local/apps/slurm/var/spool/jobXXXXXX/slurm_script
)에 스크립트를 복사했습니다. 예상한 동작을 얻기 위해 --wrap
쉘 스크립트에 지정된 명령 문자열을 래핑하는 매개변수가 포함된 작업을 제출했습니다.