![bash 스크립트 매개변수를 파일에서 확장자를 뺀 값으로 설정하는 방법](https://linux55.com/image/208324/bash%20%EC%8A%A4%ED%81%AC%EB%A6%BD%ED%8A%B8%20%EB%A7%A4%EA%B0%9C%EB%B3%80%EC%88%98%EB%A5%BC%20%ED%8C%8C%EC%9D%BC%EC%97%90%EC%84%9C%20%ED%99%95%EC%9E%A5%EC%9E%90%EB%A5%BC%20%EB%BA%80%20%EA%B0%92%EC%9C%BC%EB%A1%9C%20%EC%84%A4%EC%A0%95%ED%95%98%EB%8A%94%20%EB%B0%A9%EB%B2%95.png)
그래서 나는이 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
. 저는 게으르고 표현식을 테스트하지 않았으며 자주 사용하는 더 간단한 표현식으로 대체했습니다.