उपयोगकर्ता नाम से होम निर्देशिका प्राप्त करें


84

मैं गूंज के साथ किसी भी उपयोगकर्ता के घर dir प्राप्त करना चाहते हैं

echo ~puchuu
>> /home/puchuu

लेकिन मैं चर का उपयोग नहीं कर सकता

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

जवाबों:


86

आप उपयोग कर सकते हैं eval:

eval echo ~$USER

लेकिन एंड्रयू की टिप्पणी देखें और नीचे ग्लेन का जवाब दें।


8
बाश eval में यह सिर्फ echo ~$usernameठीक है के साथ की जरूरत नहीं है , लेकिन sh में eval की जरूरत है अगर एक चर है
फेलिप Alcacibar

यह कभी-कभी गलत मान देता है, शायद उसी उपयोगकर्ता नाम के साथ पिछले खाते का होम फ़ोल्डर?
एंड्रयू

@AndrewMacFie: "पिछले" से आपका क्या तात्पर्य है?
चेरोबा

1
@choroba एक उपयोगकर्ता जोड़ें, उपयोगकर्ता को हटाएं, फिर उसी उपयोगकर्ता नाम के साथ एक उपयोगकर्ता जोड़ें। यदि उपयोगकर्ता का होम फ़ोल्डर दूसरी बार अलग है, तो यह कमांड वर्तमान होम फोल्डर को वर्तमान के बजाय देता है। ग्लेन जैकमैन का उत्तर वर्तमान को देता है।
एंड्रयू

ध्यान दें कि यदि आप eval echo "~$USER"ऐसी धारणा बना रहे हैं $USERजिसमें विशेष वर्ण नहीं हैं जो शेल व्याख्या कर सकता है। उदाहरण के लिए, यदि USER="foo\$bar", तब जब हम evalशेल $barआपके आउटपुट में स्थानापन्न करेंगे, जो आप नहीं चाहते हैं। मूल रूप से, यदि आप इस मार्ग को लेते हैं, तो आपको यह सुनिश्चित करने की आवश्यकता है कि $USERसमझदार इनपुट है। ज्यादातर समय यह शायद होगा, लेकिन आपको इसे ध्यान में रखना चाहिए।
ज़ोरावर

65

यह आपके लिए काम कर सकता है:

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

यह उन उपयोगकर्ताओं पर भी काम करेगा जो आप नहीं हैं। उदाहरण के लिए,

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

यह वैध है, getenvइसके स्थान का उपयोग करने के बजाय passwdघर के स्थान को संभालने से भी एक कदम आगे है/home/
इवान कैरोल

13

ऐसा लगता है कि आप उस उपयोगकर्ता हैं - क्यों नहीं

echo $HOME

?


3
यदि आप एक sudo'ed वातावरण में हैं और यह sudo -H या -i झंडे पास नहीं करता है, तो काम नहीं करेगा - $ HOME अभी भी पिछले (sudo'ing) उपयोगकर्ता के होम डायरेक्टरी होंगे।
असफंद काजी

1

मुझे नहीं पता कि यह मदद करता है, लेकिन अभिव्यक्ति के बाहर टिल्ड को जेडश पर काम करता है, लेकिन बैश पर नहीं:

echo ~`echo $USER`

0

एक बार जब आप लॉगिन कर लेते cdहैं, तो अपने होम डायरेक्टरी में जाने के लिए दौड़ें, फिर pwdवर्किंग डायरेक्टरी को प्रिंट करने के लिए चलाएं ।


वह काम करने वाला नहीं है; यहाँ विचार शेल स्क्रिप्ट में ऐसा करने के लिए है, और संभवतः प्रश्न में उपयोगकर्ता की साख की आवश्यकता के बिना ...
SamB

-1 उसी कारण से सैमबी का उल्लेख किया गया है। मैंने आपके उत्तर को संपादित किया क्योंकि मैं चाहता हूं कि आप यह देखें कि मार्कडाउन प्रारूपण का उपयोग कैसे किया जाए, और अधिक संक्षिप्त हो। तुम भी बहुत आसान विधि याद किया, जो सिर्फ है echo $HOME
वेजेंड्रिया
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.