bash : 나쁜 대체
#!/bin/bash
jobname="job_201312161447_0003"
jobname_pre=${jobname:0:16}
jobname_post=${jobname:17}
이 bash 스크립트는 Ubuntu에서 잘못된 대체 오류를 발생시킵니다. 도움을 주시면 감사하겠습니다.
/bin/sh
우분투 아래 의 기본 쉘 ( )은 dash
아닌을 가리 킵니다 bash
.
me@pc:~$ readlink -f $(which sh)
/bin/dash
따라서을 사용 chmod +x your_script_file.sh
하여 실행하거나을 사용하여 ./your_script_file.sh
실행하면 bash your_script_file.sh
제대로 작동합니다.
sh your_script_file.sh
hashbang 행이 무시되고 스크립트가 dash
해당 문자열 대체 구문을 지원하지 않는 로 해석되므로 이를 사용하여 작동 하지 않습니다.
나는 같은 문제가 있었다. 스크립트가 없었는지 확인하십시오
#!/bin/sh
스크립트 상단에 대신에
#!/bin/bash
여기에 도착하는 다른 사람들에게는 명령에 env 변수 구문을 사용할 때 (예 : ${which sh}
올바른 대신) 정확한 메시지가 나타납니다.$(which sh)
스크립트 구문은 유효한 bash이며 좋습니다.
실패의 가능한 원인 :
당신
bash
은 실제로 bash가 아니지만ksh
bash의 매개 변수 대체를 이해하지 못하는 다른 쉘입니다. 스크립트가 잘 보이고 bash와 함께 작동하기 때문입니다. 수행ls -l /bin/bash
하고 정말 bash에 그리고 다른 쉘에 연결된 SYM 확인하세요.시스템에 bash가있는 경우 스크립트를 잘못된 방식으로 실행할 수 있습니다 (
ksh script.sh
또는sh script.sh
기본 쉘은 bash가 아닙니다). 당신은 적절한 shebang을 가지고 있기 때문에, bash가./script.sh
있거나bash ./script.sh
괜찮다면.
스크립트를 실행 파일로 실행하는 대신 bash 명령을 사용하여 명시 적으로 스크립트를 실행하십시오.
또한 스크립트의 첫 줄에 빈 문자열이 없는지 확인하십시오.
즉, #! / bin / bash가 스크립트의 첫 줄인지 확인하십시오.
bash 또는 dash-모두 작동하지만 구문은 다음과 같아야합니다.
FILENAME=/my/complex/path/name.ext
NEWNAME=${FILENAME%ext}new
참고 URL : https://stackoverflow.com/questions/20615217/bash-bad-substitution
'programing tip' 카테고리의 다른 글
긴 텍스트 문자열에서 모든 줄 바꿈 제거 (0) | 2020.07.30 |
---|---|
Flask에서 SQLAlchemy 결과 세트를 jsonify (0) | 2020.07.30 |
로컬 호스트에 대해 신뢰할 수있는 자체 서명 SSL 인증서 작성 (Express / Node와 함께 사용) (0) | 2020.07.30 |
HTML 이메일에서 작동하는 CSS 최대 너비에 해당합니까? (0) | 2020.07.30 |
PHP를 사용하여 경고 메시지 상자를 표시하는 방법? (0) | 2020.07.30 |