사용자 이름으로 홈 디렉토리 가져 오기


84

echo가있는 모든 사용자의 홈 디렉토리를 얻고 싶습니다.

echo ~puchuu
>> /home/puchuu

하지만 변수를 사용할 수 없습니다

echo ~$USER
>> ~puchuu
echo `echo ~$USER`
>> ~puchuu

답변:


86

당신은 사용할 수 있습니다 eval:

eval echo ~$USER

그러나 아래 Andrew 의 의견과 glenn 의 답변을 참조하십시오.


8
bash eval에서는 echo ~$username괜찮습니다. 그러나 변수 인 경우에는 eval이 필요합니다
Felipe Alcacibar

때로는 잘못된 사용자 이름을 가진 이전 계정의 홈 폴더 일 수도 있습니다.
Andrew

@AndrewMacFie : "이전"은 무엇을 의미합니까?
choroba

1
@choroba 사용자를 추가하고 삭제 한 다음 동일한 사용자 이름으로 사용자를 추가하십시오. 사용자의 홈 폴더가 두 번째로 다른 경우이 명령은 현재 폴더가 아닌 원래 홈 폴더를 제공합니다. glenn jackman의 답변이 현재 답변을 제공합니다.
Andrew

또한 쉘이 해석 할 수있는 특수 문자를 포함하지 않는 eval echo "~$USER"것으로 가정 하는 경우에도 유의하십시오 $USER. 예를 들어, 경우에 USER="foo\$bar", 우리는 때 eval쉘은 대체 할 $bar당신이 원하는하지 않은 당신의 출력으로. 기본적으로이 경로를 사용하면 제대로 $USER입력 되었는지 확인해야합니다 . 대부분의 경우에 그러할 것입니다. 그러나이 점을 명심해야합니다.
Zorawar

65

이것은 당신을 위해 일할 수 있습니다 :

homedir=$( getent passwd "$USER" | cut -d: -f6 )

이것은 귀하가 아닌 사용자에게도 적용됩니다. 예를 들어

homedir=$( getent passwd "someotheruser" | cut -d: -f6 )

이것은 집의 위치를 ​​가정하는 것보다 한 단계 더 getenv있다고 가정하는 것이 아니라 합법적 passwd입니다./home/
Evan Carroll

13

당신은 그 사용자 인 것 같습니다.

echo $HOME

?


3
sudo'ed 환경에 있고 sudo -H 또는 -i 플래그를 전달하지 않으면 작동하지 않습니다. $ HOME은 여전히 ​​이전 (스도 잉) 사용자의 홈 디렉토리입니다.
Asfand Qazi

1

그것이 도움이되는지 모르겠지만 표현식 외부에 물결표를 배치하면 ZSH에서는 작동하지만 Bash에서는 작동하지 않습니다.

echo ~`echo $USER`

0

로그인 cd한 후 실행하여 홈 디렉토리로 이동 한 후 실행 pwd하여 작업 디렉토리를 인쇄하십시오.


작동하지 않습니다. 여기서 아이디어는 쉘 스크립트에서, 그리고 아마도 해당 사용자의 자격 증명을 요구하지 않고 이것을 수행하는 것입니다.
SamB

SamB가 언급 한 것과 같은 이유로 -1. Markdown 서식을 사용하고 더 간결하게 사용하기를 원하기 때문에 답변을 편집했습니다. 또한 훨씬 쉬운 방법을 놓쳤습니다 echo $HOME.
wjandrea
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.