pwd가 --physical과 같은 긴 옵션을 허용하지 않는 이유는 무엇입니까?


11

pwd명령에 대한 매뉴얼을 표시하면 긴 옵션 --physical이 지원 된다고 말합니다.

$ man pwd
PWD(1)                           User Commands                          PWD(1)

NAME
       pwd - print name of current/working directory

SYNOPSIS
       pwd [OPTION]...

DESCRIPTION
       Print the full filename of the current working directory.

       -L, --logical
              use PWD from environment, even if it contains symlinks

       -P, --physical
              avoid all symlinks

그러나 다음을 입력하면 실패합니다.

$ pwd --physical
-bash: pwd: --: invalid option
pwd: usage: pwd [-LP]

왜 긴 옵션이 작동하지 않습니까?

RHEL 6.4를 사용하고 있습니다. pwd에 대한 별명이 구성되지 않았습니다. 표준 암호처럼 보입니다.

$ which pwd
/bin/pwd

1
매뉴얼 페이지는 bash의 일부가 아닌 독립형 유틸리티를위한 것입니다.
토마스 디키

7
사용 type대신에 which있기 때문에, which단지 쇼 명령하면서 type쇼의 키워드, 내장 명령, 별칭, 함수 및 명령 (및 해시 명령 경로). 자세한 내용은 "뭐"를 사용하지 않는 이유를
wjandrea

1
내 시스템 man pwd에는 다음과 같은 메모가 있습니다 : 섹션 your shell may have its own version of pwd, which usually supersedes the version described here. Please refer to your shell's documentation for details about the options it supports하단에 DESCRIPTION.
Nykakin

답변:


26

bash쉘에 pwd간단히 입력 할 때 사용하는 명령 이 내장 pwd되어 있습니다.

pwd맨 페이지에 설명 된대로 를 얻으려면 외부 명령을 사용해야합니다. 당신은 (실행 파일의 전체 경로를 지정하여이 작업을 수행 할 수 있습니다 /bin/pwd귀하의 경우) 또는 앞에 붙이는 env줄 앞에 : env pwd의 시작 env명령을하는 환경에 설정을 추가 할 수 있습니다 (그러나 이는 여기 수행되지 않음) 한 후 env시작 지정된 명령 으로는 env내장 명령이 없습니다 pwd, "진짜"가 /bin/pwd실행됩니다.

내장 pwdbash 의 장점은 bash현재 디렉토리를 추적하므로 값을 얻는 데 비용이 들지 않지만 외부 명령은 파일 시스템을 통해 경로를 결정하기 위해 IO를 많이 사용하는 경로를 결정해야한다는 것입니다.


4
외부 명령이 실제로 작동하는 방식이 아닙니다. unix.stackexchange.com/a/413225/5132
JdeBP

BTW : 또한 쉘 내장 (적어도 bash에서)을 비활성화 할 수 있습니다.enable -n pwd
derobert

@JdeBP 내가 마지막으로 본 적이있다 (오래 전에 :-)); getcwd()커널은 여전히 ​​시스템 호출을 사용하지만 커널은 여전히 ​​파일 시스템을 순회하며 관련 데이터 구조에 대한 액세스로 인해 커널 공간에서보다 쉽게 ​​수행 할 수 있습니다. 커널은 문자열로 작업 디렉토리를 추적하지 않습니다. "
wurtel

11

해당 맨 페이지 문서 /bin/pwd는 있지만 실행 pwd하면 셸 내장을 사용합니다. 의 출력을 참조하십시오

type pwd

쉘의 내장 pwd은 긴 옵션을 지원하지 않습니다 (쉘 문서를 참조하십시오. Bash를 사용 help pwd하기 때문에 요약을 제공합니다).

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.