Ana dizini kullanıcı adına göre al


84

Echo ile herhangi bir kullanıcının direktörünü almak istiyorum

echo ~puchuu
>> /home/puchuu

Ama değişken kullanamıyorum

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

Yanıtlar:


86

Kullanabilirsiniz eval:

eval echo ~$USER

Ama bakın Andrew 'in yorumunu ve Glenn ' aşağıda ler cevap.


8
Bash eval sadece bunu gerekli değildir echo ~$usernamedeğişken ise sorun yok, ama sh eval gereklidir
Felipe Alcacibar

Bu bazen yanlış bir değer verir, belki aynı kullanıcı adı ile önceki bir hesabın giriş klasörü?
Andrew,

@AndrewMacFie: "Önceki" ile ne demek istiyorsunuz?
choroba

1
@choroba Bir kullanıcı ekleyin, kullanıcıyı silin, ardından aynı kullanıcı adına sahip bir kullanıcı ekleyin. Kullanıcının giriş klasörü ikinci kez farklıysa, bu komut geçerli klasör yerine orijinal giriş klasörünü verir. Glenn Jackson'ın cevabı şimdiki olanı verir.
Andrew,

Ayrıca , kabuğun yorumlayabileceği özel karakterler içermeyen eval echo "~$USER"varsayımı yapıyorsanız unutmayın $USER. Örneğin, eğer USER="foo\$bar"öyleyse eval, kabuk $barne zaman istediğin olmayan çıktının yerine geçecektir . Temel olarak, bu rotayı takip ederseniz, $USERbunun aklı başında bir girdi olduğundan emin olmanız gerekir . Muhtemelen çoğu zaman olacak, ama bunu aklınızda tutmalısınız.
Zorawar

65

Bu sizin için işe yarayabilir:

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

Bu aynı zamanda siz olmayan kullanıcılar üzerinde de çalışacaktır. Örneğin,

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

Bu, okunaklı bir durum getenvolduğunu varsaymak yerine kullanmak passwd, ev konumunun varsayılmasından bir adım daha olduğunu varsaymaktır/home/
Evan Carroll

13

Görünüşe göre o kullanıcı değilsin - neden olmasın

echo $HOME

?


3
Eğer bir sudo'ed ortamındaysanız ve -H veya -i bayraklarını sudo geçmediyseniz bu işe yaramaz - $ HOME, önceki (sudo'ing) kullanıcının ana dizini olacak.
Asfand Qazi,

1

İşe yarayıp yaramadığını bilmiyorum ama ifadeyi dışa yerleştirmek ZSH'de çalışıyor, ancak Bash'de değil:

echo ~`echo $USER`

0

Giriş yaptıktan sonra cd, ana dizininize gitmek için çalıştırın, ardından pwdçalışma dizinini yazdırmak için çalıştırın .


Bu işe yaramayacak; Buradaki fikir bunu kabuk betiğinde ve muhtemelen söz konusu kullanıcının kimlik bilgilerini gerektirmeden
yapmaktır

-1 aynı sebepten dolayı SamB dedi. Cevabınızı düzelttim çünkü Markdown formatını nasıl kullanacağınızı ve daha özlü olmanızı istiyorum. Ayrıca sadece daha kolay olan yöntemi de kaçırdınız echo $HOME.
wjandrea
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.