cd/popd를 이전에 이름을 바꾼 다음 다시 만든 디렉토리가 잘못된 디렉토리로 이동합니다.

cd/popd를 이전에 이름을 바꾼 다음 다시 만든 디렉토리가 잘못된 디렉토리로 이동합니다.

기존 디렉터리를 새 이름으로 이동하고 이전 이름으로 새 디렉터리를 만든 다음 새로 만든 디렉터리로 변경하는 bash 스크립트를 작성 중입니다. 이상하게도 새 디렉터리는 비어 있지 않지만 이름이 변경된 이전 디렉터리의 모든 내용이 포함되어 있습니다. 그러나 이동은 성공적이었습니다. 이름이 변경된 디렉토리가 존재하며 여기에 포함될 내용이 포함되어 있습니다. 그리고 inode를 비교해 보면 여전히 이름이 바뀐 디렉터리에 있지만 'pwd'로 표시된 이름은 내가 새 디렉터리에 있어야 함을 나타냅니다.

더 명확하게 설명하기 위해 백업을 생성하려는 디렉터리에서 시작하겠습니다. 스크립트는 기본적으로 다음을 수행합니다.

cd <away>
mv <olddir> <olddir>~
mkdir <olddir>
cd <olddir>

전체 경로 이름을 사용하고 있습니다. pushd/popd를 사용하면 동일한 결과가 나타납니다. 결과는 매우 이상합니다(test9는 예상 디렉토리에 있는지 쉽게 확인하기 위해 만든 빈 파일입니다).

/opt/camera_pkg_sdk$ ls -ia1
20578307 .
20447233 ..
20578305 test9
/opt/camera_pkg_sdk$ ls -ia1 ../camera_pkg_sdk
20578306 .
20447233 ..
/opt/camera_pkg_sdk$

Inode 20578307은 이름이 변경된 디렉토리이고 20578306은 새로운 디렉토리입니다. 내 스크립트의 다양한 위치에 '동기화'를 삽입해 보았지만 운이 없었습니다. 스크립트가 실행된 후 명령줄에서 수동으로 한 수준 위로 올라갔다가 다시 돌아오면 모든 것이 다시 정상이며 올바른 inode 번호가 표시됩니다.

무엇을 시도해야 할지 아시나요? 어떻게 해결하나요? 이유는 무엇입니까? 아니면 진정한 해결책이 있나요? 나는 필요한 것을 달성하기 위해 노력하는 방식과 마찬가지로 그런 일이 발생하는 이유에 관심이 있습니다.

답변1

당신은 디렉토리를 변경한 적이 없습니다...

스크립트가 실행된 후 명령줄에서 수동으로 한 수준 위로 올라갔다가 다시 돌아오면 모든 것이 다시 정상입니다.

일반적인 방법으로 다른 스크립트를 실행하여 터미널의 현재 디렉터리를 변경할 수 없습니다. 이는 스크립트가 상위 쉘의 환경, 즉 터미널 세션에 영향을 주지 않는 하위 쉘에서 실행되기 때문입니다.

당신은원천귀하의 스크립트는 다음과 같습니다.

source script

이는 다음과 같이 축약될 수도 있습니다.

. script

동일한 쉘 내에서 실행합니다.

관련 정보