그래서 나는이 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
. 저는 게으르고 표현식을 테스트하지 않았으며 자주 사용하는 더 간단한 표현식으로 대체했습니다.