CD의 "-e" 옵션

CD의 "-e" 옵션

Bash 매뉴얼 페이지에 따라 반환 실패 상태를 초래하는 -e옵션cd성공적으로 디렉토리를 변경한 후.

-e 옵션이 -P와 함께 제공되고 cd가 성공적인 디렉토리 변경 후 현재 작업 디렉토리를 성공적으로 확인할 수 없는 경우 cd는 실패 상태를 반환합니다.

$ cd
$ mkdir -p test/a/b
$ cd test/a/b
$ rmdir ../b ../../a
$ cd -Pe ..; echo $?
cd: error retrieving current directory: getcwd: cannot access parent directories: No such file or directory
1

위의 내용이 반환되는 이유는 무엇입니까 1? cd -Pe ..현재 디렉터리와 상위 디렉터리가 모두 더 이상 존재하지 않는 경우 어떻게 디렉터리를 성공적으로 변경할 수 있습니까?

또한 원하는 디렉터리로 변경하지 못할 때마다 실패한 반환 상태를 반환하려면 cd어떤 상황에서 이를 추가해야 합니까 -Pe? 내가 아는 한, or 의 매개변수를 사용할 .때만 필요합니다 ...cd

답변1

cd -Pe ..현재 디렉터리와 상위 디렉터리가 모두 더 이상 존재하지 않는 경우 어떻게 디렉터리를 성공적으로 변경할 수 있습니까?

쉘(또는 다른 프로세스)이 이를 열어 두거나 현재 디렉토리로 유지하는 한 여전히 존재하기 때문입니다. 이는 최종 사용자가 닫을 때까지 파일이 존재하는 방식과 비슷하지만 파일을 디렉터리에 포함할 수 없기 때문에 디렉터리에는 덜 유용합니다(링크 해제 시 디렉터리는 비어 있어야 함).

그렇지 않은 경우에도 -e불평 cd을 하게 되지만, 디렉토리 변경 사항은 보시는 것처럼 계속 나타날 것입니다. 여기서 디렉터리와 권한을 구별할 수 있지만 여전히 유용한 작업은 수행하지 않습니다.

/tmp$ mkdir -p test/a/b
/tmp$ chmod 0700 test/a/b; chmod 0770 test/a
/tmp$ cd test/a/b
/tmp/test/a/b$ rmdir ../b ../../a
/tmp/test/a/b$ ls -ld .
drwx------ 0 user group 0 Mar  7 18:51 ./         # This is 'a'
/tmp/test/a/b$ cd -P ..
cd: error retrieving current directory: getcwd: cannot access parent directories: No such file or directory
$ ls -ld .
drwxrwx--- 0 user group 0 Mar  7 18:51 ./         # this is 'b'
$ touch foo
touch: cannot touch 'foo': No such file or directory

작업 디렉토리를 전체 경로를 결정할 수 없는 디렉토리로 변경하는 다른 방법은 생각나지 않습니다. cd중간 디렉터리에 대한 읽기 권한이 없는 디렉터리에 들어갈 수 있습니다 . 하지만 이 경우에도 직접 또는 모든 심볼릭 링크를 수동으로 확인하여 선택한 경로를 알 수 있습니다.

적어도 Linux에서는 getcwd()프로세스 자체가 중간 디렉터리 이름을 읽을 수 없는 경우에도 현재 디렉터리의 경로가 알려집니다. 매뉴얼 페이지 chroot에는 디렉토리의 프로세스에 대해 가능한 방법으로 s 및 mount 네임스페이스가 언급되어 있지만 이름으로는 액세스할 수 없습니다.

답변2

종료 코드 1은 성공이 아니라 실패를 나타냅니다. 따라서 cd -Pe ..변경 후 현재 디렉터리를 확인할 수 없음을 올바르게 나타냅니다.

내가 아는 한, -Pe필요할 시기에 대해서는 당신 말이 옳습니다. 삭제된 디렉터리에 대한 심볼릭 링크가 손상된 경우와 같은 다른 경우에는 cd오류 메시지와 종료 코드 1( -Pe.

바라보다다음과 같은 bash cd 옵션의 예: cd -Pe@ $directory이에 대한 자세한 내용은...

관련 정보