Bạn không bao giờ nên phân tích /etc/passwd
trực tiếp. Bạn có thể đang ở trên một hệ thống có người dùng từ xa, trong trường hợp đó họ sẽ không tham gia /etc/passwd
. Các /etc/passwd
tập tin có thể là một nơi khác. Vân vân.
Nếu bạn cần truy cập trực tiếp vào cơ sở dữ liệu người dùng, hãy sử dụng getent
.
$ getent passwd phemmer
phemmer:*:1000:4:phemmer:/home/phemmer:/bin/zsh
$ getent passwd phemmer | awk -F: '{ print $6 }'
/home/phemmer
Tuy nhiên, cũng có một cách khác không liên quan đến phân tích cú pháp:
$ user=phemmer
$ eval echo "~$user"
/home/phemmer
Các ~
nhà điều hành trong lớp vỏ mở rộng vào thư mục chính của người dùng chỉ định. Tuy nhiên, chúng ta phải sử dụng eval
vì việc mở rộng biến $user
xảy ra sau khi mở rộng ~
. Vì vậy, bằng cách sử dụng eval
dấu ngoặc kép và đôi, bạn thực sự mở rộng $user
trước, sau đó gọi eval echo "~phemmer"
.
Một khi bạn có thư mục nhà, đơn giản là giải /.ssh
quyết đến cùng.
$ sshdir="$(eval echo "~$user/.ssh")"
$ echo "$sshdir"
/home/phemmer/.ssh