대시에 .가 있는 파일에 "찾을 수 없음" 오류가 발생합니다.

대시에 .가 있는 파일에 "찾을 수 없음" 오류가 발생합니다.

. file매뉴얼 페이지에 지정된 방법을 사용하여 대시로 파일을 가져오려고 합니다.

 . file
        The commands in the specified file are read and executed by the
        shell.

하지만 파일을 사용해도 오류가 발생합니다.당신은 가지고 있습니까?:

$ ls
defaults.sh  run.sh
$ cat run.sh 
#!/bin/sh

. defaults.sh

echo "VAR: $VAR"
$ cat defaults.sh 
VAR=abc
$ bash run.sh 
VAR: abc
$ dash run.sh 
run.sh: 3: .: defaults.sh: not found

. defaults.sh대화형 대시를 사용해도 같은 일이 발생합니다.

여기서 내가 어디서 잘못됐나요?

답변1

./일부 쉘의 경우 앞에 추가 경로 또는 절대 경로가 필요합니다 .

. ./defaults.sh

추가하고 싶을 수도 있습니다.run.sh스크립트의 절대 경로, 그렇지 않으면 defaults.sh사용자 위치에서 가져옵니다.

SCRIPT_DIR="$(cd "$(dirname "$0")" && pwd)"
. "$SCRIPT_DIR"/defaults.sh

답변2

run.sh 및 defaults.sh 파일과 동일한 디렉터리에서 "dash run.sh"를 실행하는 경우 PATH에 $PWD를 추가해 보세요.

내 테스트에서 다음과 같은 결과를 확인했습니다.

# dash run.sh
run.sh: 3: .: defaults.sh: not found

그런 다음 다음 단계를 수행했습니다.

# echo $PATH
/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin
# export PATH=$PATH:$PWD

PATH에 $PWD를 추가한 후의 결과:

# dash run.sh
VAR: abc

관련 정보