나는 본 적이이 답변이것을 검색한 이후 처음에는 다음 스크립트를 작성했습니다.
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
}