왜냐하면설명서가 잘못됐네요.

왜냐하면설명서가 잘못됐네요.

Bourne Again 쉘 매뉴얼은 다음과 같이 말합니다:cd dir

[...] 모든 디렉토리 이름이 CDPATH검색됩니다.목차. […] 만약에목차슬래시( /)로 시작한 다음 CDPATH사용하지 않은 채로 두십시오.

Z 쉘 매뉴얼에는 다음과 같이 나와 있습니다.cd arg

그렇지 않은 경우아르기닌슬래시로 시작하여 지정된 디렉터리로 변경을 시도합니다.아르기닌.

만약에아르기닌슬래시로 시작하지 않으면 동작은 현재 디렉토리가 .쉘 인수에 포함된 디렉토리 목록에 나타나는지 여부에 따라 달라집니다 cdpath. [...] .존재하는 cdpath경우 cdpath검색은 엄격하게 순차적이므로 .적절한 지점에서만 시도됩니다.

POSIX 일반 쉘 매뉴얼에는 다음과 같이 나와 있습니다 CDPATH.

in 명령 PATH으로 시작하지 않는 디렉토리 와 동일하게 작동합니다 ./cd

Debian Almquist 쉘 매뉴얼은 다음과 같이 말합니다 cd:

[...] 쉘 변수가 설정되고 디렉토리 이름이 슬래시로 시작하지 않으면 나열된 디렉토리 중에서 지정된 디렉토리가 CDPATH검색됩니다 .CDPATH

93년 Korn 쉘 매뉴얼에는 다음과 같이 나와 있습니다.cd arg

만약에아르기닌로 시작하면 /검색 경로가 사용되지 않습니다. 그렇지 않으면 경로의 각 디렉터리가 검색됩니다.아르기닌.

MirBSD Korn 쉘 매뉴얼은 다음과 같이 말합니다 CDPATH:

in 명령 PATH으로 시작하지 않는 디렉토리 와 동일하게 작동합니다 ./cd

'93 Korn 쉘을 제외하고는 실제로는 그렇지 않습니다.

% 내보내기 CDPATH=/tmp:
% mkdir wibble /tmp/wibble
% ksh93 -c 'cd ./wibble'
/tmp/와이블
% 대시 -c 'cd ./wibble ;password'
/홈/JdeBP/wibble
% bash -c 'cd ./wibble ;password'
/홈/JdeBP/wibble
% mksh -c 'cd ./wibble ;password'
/홈/JdeBP/wibble
% lksh -c 'cd ./wibble ;비밀번호'
/홈/JdeBP/wibble
% posh -c 'cd ./wibble ;password'
/홈/JdeBP/wibble
% zsh -c 'cd ./wibble ;password'
/홈/JdeBP/wibble
%

/tmp/./wibble존재하고 디렉토리이지만 '93 Korn 쉘만 검색 CDPATH하고 찾습니다. 나머지는 그렇지 않습니다.

왜 안 돼?

답변1

왜냐하면설명서가 잘못됐네요.

93년 Korn 쉘도 잘못되었습니다.

1997년단일 유닉스 사양설명하다:

디렉토리 피연산자가 /슬래시( ) 문자로 시작하지 않고 첫 번째 구성요소가 점 또는 점-점이 아닌 경우 cd검색은 다음과 같습니다 .목차CDPATH나열된 순서대로 변수에 지정된 각 디렉터리를 기준으로 합니다 .

2016년단일 유닉스 사양같은 것을 말하는 다른 약간 중복되는 방법:

3. 만일목차피연산자는 <슬래시> 문자로 시작하고 curpath피연산자로 설정한 후 7단계로 진행합니다.

4. 첫 번째 구성요소인 경우목차피연산자가 점 또는 점-점인 경우 6단계를 계속합니다.

[…]

6. curpath디렉토리 피연산자로 설정합니다.

매뉴얼에는 .and 에 대한 부분이 언급되어 있지 않지만 ..'93 Korn 쉘을 제외한 모든 쉘이 실제로 수행하는 작업은 매뉴얼에 다음과 같이 나와 있음에도 불구하고입니다.

% 내보내기 CDPATH=/tmp:
% lksh -c 'CD 스윙'
/tmp/와이블
% 대시 -c 'CD 스윙'
/tmp/와이블
% posh -c 'CD 스윙'
/tmp/와이블
% bash -c 'CD 스윙'
/tmp/와이블
% mksh -c 'CD 스윙'
/tmp/와이블
% zsh -c 'CD 스윙 비밀번호'
/tmp/와이블
%

관련 정보