รับโฮมไดเร็กตอรี่ด้วยชื่อผู้ใช้


84

ฉันต้องการได้รับ dir บ้านของผู้ใช้ใด ๆ ด้วยเสียงสะท้อน

echo ~puchuu
>> /home/puchuu

แต่ฉันไม่สามารถใช้ตัวแปร

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

คำตอบ:


86

คุณสามารถใช้eval:

eval echo ~$USER

แต่ดูความคิดเห็นของAndrewและคำตอบของglennด้านล่าง


8
ในการทุบตี eval ไม่จำเป็นต้องใช้เพียงแค่echo ~$usernameมันก็โอเค แต่ใน sh eval เป็นสิ่งจำเป็นหากเป็นตัวแปร
เฟลิเป้อัลคาซิบาร์

บางครั้งสิ่งนี้ให้ค่าที่ไม่ถูกต้องบางทีโฟลเดอร์หลักของบัญชีก่อนหน้านี้ที่มีชื่อผู้ใช้เดียวกัน
Andrew

@AndrewMacFie: คุณหมายถึงอะไรโดย "ก่อนหน้า"
choroba

1
@choroba เพิ่มผู้ใช้ลบผู้ใช้แล้วเพิ่มผู้ใช้ด้วยชื่อผู้ใช้เดียวกัน หากโฮมโฟลเดอร์ของผู้ใช้แตกต่างกันในครั้งที่สองคำสั่งนี้จะให้โฮมโฟลเดอร์ดั้งเดิมแทนที่จะเป็นโฟลเดอร์ปัจจุบัน คำตอบของ glenn jackman ให้ค่าปัจจุบัน
แอนดรู

โปรดทราบด้วยว่าหากคุณ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 จะยังคงเป็นโฮมไดเร็กตอรี่แรกของผู้ใช้ (sudo'ing)
Asfand Qazi

1

ฉันไม่รู้ว่ามันช่วยได้หรือไม่ แต่การวางเครื่องหมายตัวหนอนนอกนิพจน์นั้นใช้กับ ZSH แต่ไม่ใช่ใน Bash:

echo ~`echo $USER`

0

เมื่อคุณลงชื่อเข้าใช้cdให้ไปที่ไดเรกทอรีหลักของคุณจากนั้นเรียกใช้pwdเพื่อพิมพ์ไดเรกทอรีทำงาน


นั่นจะไม่ทำงาน ความคิดที่นี่คือการทำเช่นนี้ในเชลล์สคริปต์และสันนิษฐานโดยไม่ต้องมีข้อมูลประจำตัวของผู้ใช้ในคำถาม ...
SAMB

-1 ด้วยเหตุผลเดียวกันที่ SamB พูดถึง ฉันแก้ไขคำตอบของคุณเพราะฉันต้องการให้คุณเห็นวิธีการใช้การจัดรูปแบบมาร์กดาวน์และให้กระชับยิ่งขึ้น echo $HOMEนอกจากนี้คุณยังคิดถึงวิธีการที่ง่ายมากซึ่งเป็นเพียง
wjandrea
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.