programing tip

bash : 나쁜 대체

itbloger 2020. 7. 30. 10:06
반응형

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.shhashbang 행이 무시되고 스크립트가 dash해당 문자열 대체 구문을 지원하지 않는 로 해석되므로 이를 사용하여 작동 하지 않습니다.


나는 같은 문제가 있었다. 스크립트가 없었는지 확인하십시오

#!/bin/sh 

스크립트 상단에 대신에

#!/bin/bash

여기에 도착하는 다른 사람들에게는 명령에 env 변수 구문을 사용할 때 (예 : ${which sh}올바른 대신) 정확한 메시지가 나타납니다.$(which sh)


스크립트 구문은 유효한 bash이며 좋습니다.

실패의 가능한 원인 :

  1. 당신 bash은 실제로 bash가 아니지만 kshbash의 매개 변수 대체를 이해하지 못하는 다른 쉘입니다. 스크립트가 잘 보이고 bash와 함께 작동하기 때문입니다. 수행 ls -l /bin/bash하고 정말 bash에 그리고 다른 쉘에 연결된 SYM 확인하세요.

  2. 시스템에 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

반응형