심볼릭 링크와 sudo


10

심볼릭 링크를 만듭니다.

ln -s /tmp/folder1 /tmp/folder2

그런 다음 / tmp / folder2로 이동하여 다음을 실행합니다 pwd.

$ cd /tmp/folder2/
$ pwd
/tmp/folder2
$ sudo pwd
/tmp/folder1 # <-- This is the odd part

왜 않습니다 pwd와 함께 sudo원래의 디렉토리를 제공? bash 스크립트를 작성 중이며 현재 디렉토리의 절대 경로가 필요합니다. sudo를 사용하면 원래 디렉토리를 얻을 수없는 것 같습니다.


pwd가 물리적 (/ tmp / folder1) 경로 또는 둘 다에 대한 논리적 (/ tmp / folder2) 경로를 반환하도록 하시겠습니까?
user9517

목표는 sudo를 사용할 때 논리 경로를 반환하는 것입니다
iDev247

답변:


14

PWD 명령 및 / 빈 / 비밀번호 내장 쉘 모두이다. 정상적인 상황에서는 내장이 / bin / pwd보다 우선적으로 실행됩니다. pwd와 명령으로 호출 할 수 있습니다 pwd -L또는 pwd -P에 내장 및 / 빈 / 비밀번호 기본적으로 두 pwd -L사람이 페이지에서

-L,-심볼릭 링크를 포함하더라도 환경에서 논리적으로 PWD 사용

따라서 pwd를 실행할 때 실제로 pwd -L을 실행하여 실제로 $ PWD를 인쇄합니다 (있는 경우). 를 실행할 때 sudo pwdsudo는 env_keep지시문 을 통해 전달하도록 지시 된 환경 변수 만 제공합니다 . PWD는 일반적으로이 목록에 없으므로 sudo pwd는 현재 위치에서 작동해야하며 실제로 다음과 같이 실행됩니다.pwd -P

-P,-물리적으로 모든 심볼릭 링크를 피하십시오

문제를 해결하는 방법은 pwd -P물리적 디렉토리 경로를 일관되게 원하거나 (@Felix가 말한 것처럼) sudoers의 env_keep 지시문을 통해 유지할 PWD를 환경 변수 목록에 추가하는 것입니다

env_keep += "PWD"  

공장! PWD가 env_keep에 추가 된 후 sudo pwd -L논리 경로 를 가져와야 합니다. sudo pwd물리적 경로를 반환합니다.
iDev247

6

bash에서 pwd내장입니다. /bin/pwd와 같은 동작을 sudo pwd합니다.

당신은 원할 것입니다

  1. 사용 sudo pwd -L하는 경우에만 작동합니다.
  2. 포함 Defaults env_keep=PWD귀하의 sudoers파일
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.