디렉터리를 변경한 다음 파일을 검색하는 스크립트를 작성했습니다.
#!/bin/bash
model_dir=/mypath
function chdir () {
cd $1
}
chdir ${model_dir}/config
if [[ ! -s *.cfg ]]
then
echo `date` "configure file does not exist"
exit 1
fi
.source myscript.sh
답변1
귀하의 스크립트(특히 내부 cd
명령)는 또는 이와 동등한 기능을 사용하여 호출하면 제대로 작동합니다.bash
source
.
주요 문제는 @adonis가 이미 주석에서 지적했듯이 "*.cfg"라는 파일이 실제로 존재하지 않는 한 디렉토리를 올바르게 변경한 후 쉘이 종료된다는 것입니다. 이는 매우 의심스럽습니다.
*.cfg를 패턴으로 사용하려는 것 같습니다. 예상대로 작동하도록 스크립트를 약간 수정하는 방법은 다음과 같습니다.
#!/bin/bash # Note that the shebang is useless for a sourced script
model_dir=/mypath
chdir() { # use either function or (), both is a non portable syntax
cd $1
}
chdir ${model_dir}/config
if [ ! -s *.cfg ]; then # Single brackets here for the shell to expand *.cfg
echo $(date) "configure file does not exist"
exit 1 # dubious in a sourced script, it will end the main and only shell interpreter
fi
답변2
cd
현재 쉘 환경이 아닌 스크립트 내부에서 명령이 실행되기 때문이다 . 현재 쉘 환경에서 스크립트를 실행하려면 다음과 같이 실행하십시오.
. /path/to/script.sh
pwd
귀하의 명령문이 대체된 내 스크립트의 실제 예제 출력 if
:
Jamey@CNU326BXDX ~
$ /usr/local/bin/this.sh
/cygdrive/c/users/jamey/downloads
Jamey@CNU326BXDX ~
$ . /usr/local/bin/this.sh
/cygdrive/c/users/jamey/downloads
Jamey@CNU326BXDX /cygdrive/c/users/jamey/downloads
$
스크립트를 두 번째 실행한 후 현재 작업 디렉터리를 기록해 둡니다.