bash 스크립트 매개변수를 파일에서 확장자를 뺀 값으로 설정하는 방법

bash 스크립트 매개변수를 파일에서 확장자를 뺀 값으로 설정하는 방법

그래서 나는이 bash 파일을 가지고 있습니다test.sh

#!/bin/bash -l
out_file=`basename "$0"`
#SBATCH --gpus=1
#SBATCH -p long
#SBATCH -o err_${out_file::-3}.out

오류를 에 출력하고 싶습니다 err_test.out. 이것이 위의 파일에서 수행하려는 작업이지만 오류가 발생합니다. =출력 파일이 내가 지정한 파일 이름으로 설정되는 방식이 마음에 들지 않습니다 .

답변1

일반적인 접근 방식은 다음과 같습니다.

#!/bin/bash
out_file=$(basename "$0")
echo sbatch --gpus=1 -p long -o "err_${out_file%.*}.out"

sbatch시도하려는 명령이 출력 되면 삭제 echo하고 시도해 보십시오.

몇 가지 의견:

  • 99%의 경우 스크립트를 실행하는 셸이 로그인 셸로 작동하는 것을 원하지 않으므로 -l맨 위 줄에서 해당 옵션을 제거했습니다.
  • $( ... )백틱/백틱을 사용하는 기존 방식보다 명령 출력을 캡처하는 더 나은 방법이 있는 경우가 많습니다. 특수 문자와 하나의 캡처를 다른 캡처 내에 중첩하는 것은 문제가 훨씬 적습니다.
  • 변수에서 후행 문자를 제거하는 방법에 대한 올바른 아이디어가 있습니다 $out_file. 저는 게으르고 표현식을 테스트하지 않았으며 자주 사용하는 더 간단한 표현식으로 대체했습니다.

관련 정보