'CD//;' # 여기서 무슨 일이 벌어지고 있는 걸까요? [복사]

'CD//;' # 여기서 무슨 일이 벌어지고 있는 걸까요? [복사]

방금 동료가 이상한 점을 지적했는데 가능한 설명이 무엇인지 궁금합니다.

내가 시도한 시스템에서 cd ​​/', 'cd //' 및 'cd ///'는 모두 디렉터리를 파일 시스템 루트로 변경하는 효과가 있습니다. 그러나 'cd //;pwd'와 'cd ///;pwd'는 '/' 응답을 반환하지만 'cd //;pwd'는 다른 경우와 마찬가지로 파일 시스템 루트임에도 '//'를 반환합니다.

무엇을 제공합니까?

답변1

일부 시스템에서는 이중 슬래시를 사용하여 네트워크의 호스트 이름을 나타냅니다. 예를 들어,

//host/usr/bin

POSIX는 설명에서 이 사용법을 인식합니다.cd:

구현이 더욱 단순화될 수 있습니다.코파스선행하지 않는 후행 문자를 제거하여<slash>문자, 선행하지 않는 여러 연속 문자를 단일 문자로 바꿉니다.<slash>, 교체또는 여러 명의 주요 캐릭터와 하나의<slash>. 만약, 정규화의 결과로,코파스변수가 비어 있으며 추가 단계가 필요하지 않습니다.

예를 들어 Apollo 워크스테이션은 이 작업을 수행합니다(참조://, # 등을 사용하는 이유는 무엇입니까?Tim Berners-Lee의 FAQ를 참조하세요.

답변2

pwdpwd내 시스템에는 내장된 소스 bash/usr/bin/pwdGNU coreutils의 두 가지 가능한 소스가 있습니다 . ( cd //; pwd쉘 내장을 사용하여 ) 발행 하면 //. 루트 목차).cd //; /usr/bin/pwd/ls

따라서 대답은 두 가지 다른 개념, 즉 작업 디렉터리에 대한 셸의 개념과 실제 프로세스 CWD를 포함하는 것으로 보입니다. 내장된 pwd쿼리는 전자에 대해 쿼리하는 반면 /usr/bin/pwd(및 다른 바이너리)는 후자에만 액세스할 수 있으며 전자만이 이에 대해 알고 있습니다 //. 셸의 작업 디렉터리 개념이 /와 을 구별하는 이유 //와 그 의미는 //모르겠습니다.

편집: 일부 검색 결과가 나왔습니다.이 문제, 이는 몇 가지 단서를 제공합니다. 분명히 이 이상한 동작은 표준 내에 있지만 여전히 이상합니다.

관련 정보