로그인한 사용자의 홈 디렉터리에 있는 모든 내용을 참조하여 /etc/paths.d/에 경로를 추가합니다.

로그인한 사용자의 홈 디렉터리에 있는 모든 내용을 참조하여 /etc/paths.d/에 경로를 추가합니다.

Postgres.app 웹사이트에서 이 멋진 트릭을 찾았습니다.

echo /Users/user1/latest/bin | sudo tee /etc/paths.d/postgresapp

알고 싶습니다. 어떻게 해야 하나요?어느로그인한 사용자입니다. 나는 다음과 같은 것을 원한다

echo {whatever the home directory of the logged in user at runtime}/latest/bin | sudo tee /etc/paths.d/postgresapp

내 첫 번째 생각은 해당 변수를 사용해 보는 것이었지만 $HOME내 home 변수는 내 홈 디렉터리를 가리키며 모든 사용자가 Mac에 로그인하여 Terminal.app을 사용할 때 이 변수가 작동하도록 하고 싶습니다.

답변1

실험을 통해 제가 아는 한, 이 작업을 수행하는 데 사용할 수는 없지만 $HOME다른 방법이 있다는 것이 대답입니다.

HOME현재 사용자의 경로를 포함하므로(환경은 프로세스별이라는 점을 기억하세요), $HOME/latest/bin라인을 추가할 때 경로를 확장하지 않고 경로를 포함하는 파일을 만드는 것이 당연한 시도입니다. ( 명령줄에서 echo '$HOME/blah...'작은따옴표를 사용하는 경우입니다.)

그런 다음 셸이 이러한 파일을 읽고 경로를 설정할 때 해당 콘텐츠를 삽입할 수 있기를 원합니다. 그러나 path-helper사용된 도구가 /etc/paths.d달러 기호를 벗어나는 것처럼 보이기 때문에 이는 작동하지 않습니다 .

$ cat /etc/paths.d/test 
$HOME/test
$ PATH="" /usr/libexec/path_helper -s
PATH="/usr/bin:/bin:/usr/sbin:/sbin:/usr/local/bin:/opt/X11/bin:\$HOME/test"; export PATH;

따라서 경로에 문자 그대로 달러 기호가 표시됩니다.


Bash에만 관심이 있다면 물결표( ~)를 대신 사용할 수 있습니다 $HOME. 이스케이프되지 않으며 인용될 수 있습니다 . 하지만 so PATH에서는 작동하지 않으므로 일반적인 해결책은 아닙니다.kshzsh


/etc/profile대신 에 (또는 /etc/zprofile. zsh) 디렉토리를 수동으로 추가할 수 있습니다 .

내 시스템에서 /etc/profile이 코드 조각은 아래에 지정된 경로를 설정합니다 path_helper.

if [ -x /usr/libexec/path_helper ]; then
        eval `/usr/libexec/path_helper -s`
fi

PATH파일 어딘가에 할당을 추가합니다.

PATH="$HOME/latest/bin:$PATH"

해당 줄을 에 대한 호출 뒤에 넣으면 디렉토리는 섹션의 시작 부분에 있게 되고 , path_helper앞에 넣으면 결과 경로의 끝으로 이동하는 것처럼 보입니다.path_helperpath_helper

답변2

echo '$HOME/latest/bin' | sudo tee /etc/paths.d/postgresapp

관련 정보