![매개변수에서 외부 파일을 포함할 때 파일을 찾을 수 없습니다. [세게 때리다]](https://linux55.com/image/130508/%EB%A7%A4%EA%B0%9C%EB%B3%80%EC%88%98%EC%97%90%EC%84%9C%20%EC%99%B8%EB%B6%80%20%ED%8C%8C%EC%9D%BC%EC%9D%84%20%ED%8F%AC%ED%95%A8%ED%95%A0%20%EB%95%8C%20%ED%8C%8C%EC%9D%BC%EC%9D%84%20%EC%B0%BE%EC%9D%84%20%EC%88%98%20%EC%97%86%EC%8A%B5%EB%8B%88%EB%8B%A4.%20%5B%EC%84%B8%EA%B2%8C%20%EB%95%8C%EB%A6%AC%EB%8B%A4%5D.png)
내 bash 파일에 외부 파일을 포함하는 방법에 대해 뭔가 빠진 것 같습니다.
내 시나리오에는 다음 명령이 있습니다
sh exec.sh env_local.conf ebis_tag
오류가 표시됩니다
exec.sh: 30행: .: env_local.conf: 파일을 찾을 수 없습니다.
내 팔로워들주문 실행스크립트는 다음과 같습니다
#!/bin/bash
usage_exit() {
echo "Usage: $0 [-b] env_file_path project_name" 1>&2
exit 1
}
# default BANG_RUNNING="FALSE"
BANG_RUNNING="FALSE"
while getopts b OPT
do
case $OPT in
b) BANG_RUNNING="TRUE" ;;
¥?) usage_exit;
esac
done
shift $(($OPTIND - 1))
if [ $# -ne 2 ]; then
echo $#;
usage_exit;
fi
# import env_file
# CORE_HOST
# REF_HOST
# ADMASTER_HOST
. $1
주문 실행그리고env_local.config같은 디렉토리에
[root@6d4f1e2363eb makedb]# ls -l
total 81
-rwxrwxrwx 1 1000 ftp 3381 Mar 14 09:03 admaster.sql
-rwxrwxrwx 1 1000 ftp 1675 Mar 29 03:02 ebisdata.sql
-rwxrwxrwx 1 1000 ftp 51278 Mar 29 02:16 ebis.sql
-rwxrwxrwx 1 1000 ftp 83 Mar 29 02:18 env_local.conf
-rwxrwxrwx 1 1000 ftp 93 Mar 14 09:03 env_stg.conf
-rwxrwxrwx 1 1000 ftp 7233 Mar 29 03:01 exec.sh
-rwxrwxrwx 1 1000 ftp 5854 Mar 14 09:03 README.md
-rwxrwxrwx 1 1000 ftp 10481 Mar 14 09:03 refdb.sql
drwxrwxrwx 1 1000 ftp 0 Mar 14 09:03 update
[root@6d4f1e2363eb makedb]#
내가 놓친 게 무엇입니까?
답변1
bash가 아닌 run script를 사용하고 있습니다 sh
. ( sh
아마도 bash
실행될 때 sh
다른 규칙에 따라 작동합니다.)
get file 을 사용할 때 절대 또는 상대 경로가 아니고 파일 이름만 있는 . something
경우something
POSIX 쉘의 경우:
파일이 포함되지 않은 경우
<slash>
쉘은 지정된 검색 경로를 사용하여PATH
파일이 포함된 디렉토리를 찾습니다. 그러나 일반 명령 검색과 달리 도트 유틸리티로 검색한 파일은 실행 가능하지 않아도 됩니다. 읽을 수 있는 파일이 없으면 비대화형 쉘이 중단됩니다. 대화형 쉘은 표준 오류에 진단 메시지를 기록해야 하지만 이 경우 구문 오류로 간주되어서는 안 됩니다.
Bash는 또한 현재 디렉터리에서 파일을 찾습니다. shebang을 사용하려면 bash
, not 또는 do를 사용하여 스크립트를 실행하세요. 그렇지 않으면 파일 경로를 제공합니다.sh
./exec.sh
#!/bin/bash
sh exec.sh ./env_local.config ebis_tag