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이에 대한 자세한 내용은...