Nhận thư mục nhà theo tên người dùng


84

Tôi muốn có được thư mục nhà của bất kỳ người dùng nào có tiếng vang

echo ~puchuu
>> /home/puchuu

Nhưng tôi không thể sử dụng biến

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

Câu trả lời:


86

Bạn có thể sử dụng eval:

eval echo ~$USER

Nhưng hãy xem bình luận của Andrew và câu trả lời của glenn bên dưới.


8
Trong bash eval không cần thiết chỉ với echo ~$usernamenó là ổn, nhưng trong sh eval là cần thiết nếu là một biến
Felipe Alcacibar

Điều này đôi khi cho giá trị sai, có thể là thư mục nhà của một tài khoản trước đó có cùng tên người dùng?
Andrew

@AndrewMacFie: Ý của bạn là gì trước đây?
choroba

1
@choroba Thêm người dùng, xóa người dùng, sau đó thêm người dùng có cùng tên người dùng. Nếu thư mục nhà của người dùng khác lần thứ hai, lệnh này sẽ cung cấp thư mục gốc ban đầu thay vì thư mục hiện tại. câu trả lời của glenn jackman đưa ra câu trả lời hiện tại.
Andrew

Cũng lưu ý rằng nếu bạn eval echo "~$USER"đang đưa ra giả định $USERkhông chứa các ký tự đặc biệt mà trình bao có thể diễn giải. Ví dụ, nếu USER="foo\$bar", sau đó khi chúng tôi evalshell sẽ thay thế $barvào đầu ra của bạn không phải là những gì bạn muốn. Về cơ bản, nếu bạn đi tuyến đường này, bạn cần chắc chắn rằng đó $USERlà đầu vào lành mạnh. Hầu hết thời gian có thể sẽ có, nhưng bạn nên ghi nhớ điều này.
Zorawar

65

Điều này có thể làm việc cho bạn:

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

Điều này cũng sẽ làm việc trên những người dùng không phải là bạn. Ví dụ,

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

Điều này là hợp pháp, sử dụng getenvthay vì giả định vị trí của passwdthậm chí là một bước xa hơn so với giả định vị trí của ngôi nhà là/home/
Evan Carroll

13

Có vẻ như bạn là người dùng đó - tại sao không

echo $HOME

?


3
Điều này sẽ không hoạt động nếu bạn ở trong môi trường sudo'ed và không truyền sudo các cờ -H hoặc -i - $ HOME vẫn sẽ là thư mục chính của người dùng (sudo'ing) trước đó.
Asfand Qazi

1

Tôi không biết có giúp được gì không, nhưng đặt dấu ngã bên ngoài biểu thức hoạt động trên ZSH nhưng không phải trên Bash:

echo ~`echo $USER`

0

Khi bạn đăng nhập, hãy chạy cdđể vào thư mục chính của bạn, sau đó chạy pwdđể in thư mục làm việc.


Điều đó sẽ không đi làm; ý tưởng ở đây là thực hiện điều này trong shell script và có lẽ không yêu cầu thông tin đăng nhập của người dùng trong câu hỏi ...
SamB

-1 vì lý do tương tự SamB đã đề cập. Tôi đã chỉnh sửa câu trả lời của bạn vì tôi muốn bạn xem cách sử dụng định dạng Markdown và ngắn gọn hơn. Bạn cũng đã bỏ lỡ phương pháp dễ dàng hơn nhiều, đó là chỉ echo $HOME.
wjandrea
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.