스크립트에서 디렉토리를 변경해도 디렉토리가 변경되지 않습니다. 이유는 무엇입니까?

스크립트에서 디렉토리를 변경해도 디렉토리가 변경되지 않습니다. 이유는 무엇입니까?

나는 본 적이이 답변이것을 검색한 이후 처음에는 다음 스크립트를 작성했습니다.

for i in `seq 1 $1`; 
   do cd ../;
done;

디렉토리는 변경되지 않습니다. 왜 이런 식으로 실행되고 있습니까?

./updir.sh 5

답변1

표시된 대로 스크립트를 실행하면 하위 셸에 복사된 환경이 생성되고 디렉터리나 환경 변수 설정과 같은 변경 사항은 호출 셸이 아닌 이 하위 셸 환경에만 영향을 미칩니다.

스크립트에서 현재 셸을 변경하려면 source또는 .명령을 사용하여 현재 셸 내에서 스크립트를 실행해야 합니다.

. ./updir.sh 5

별칭을 사용하여 이를 자동으로 만들 수 있습니다.

alias updir='. ./updir.sh'

또는 스크립트 대신 함수를 사용할 수 있습니다.

updir()
{   for i in `seq 1 $1`; 
       do cd ../;
    done
}

답변2

스크립트는 현재 작업 디렉토리를 별도로 추적하는 하위 쉘에서 실행되기 때문입니다. 가장 간단한 해결책은 다음과 같은 함수를 사용하는 것입니다.

function updir() {
  for i in $(seq 1 $1); do
    cd ..
  done
}

관련 정보