Câu trả lời:
Từ các biến môi trường ,
$LOGNAME
giống như $USER
cái cho
Tên của người dùng hiện đang đăng nhập. Biến này được thiết lập bởi hệ thống. Bạn có thể không nên thay đổi giá trị của nó bằng tay.
Từ man logname
tên đăng nhập - in tên đăng nhập của người dùng
Dự kiến sử dụng khác nhau bằng ví dụ sau:
pandya@pandya-desktop:~$ sudo su
root@pandya-desktop:/home/pandya# echo $LOGNAME
root
root@pandya-desktop:/home/pandya# logname
pandya
root@pandya-desktop:/home/pandya# exit
exit
pandya@pandya-desktop:~$
Ở đây bạn có thể thấy sự khác biệt sau khi đăng nhập bằng root trong terminal,
$LOGNAME
cho biết tên của người dùng hiện đang đăng nhập trong thiết bị đầu cuối (nghĩa là root
)logname
tên đăng nhập của người dùng đã đăng nhập phiên (ví dụ pandya
)Tên đăng nhập tiện ích bị phá vỡ vào ngày 16.04, rõ ràng là có chủ đích vì có thể hack giá trị mà nó trả về, đây có thể là một lỗ hổng bảo mật. https://ormszilla.gnome.org/show_orms.cgi?id=747046 Tôi đã sử dụng tên đăng nhập trong một số tập lệnh và thấy nó hữu ích vì nó luôn trả về cùng một giá trị (tên đăng nhập của tôi) cho dù tôi có gọi nó từ một cấp độ của riêng tôi hoặc từ một lệnh gọi sudo, trong khi các biến môi trường $ USER và $ LOGNAME thì không. Tôi không lo lắng về việc ai đó xâm nhập vào máy tính của tôi và sửa đổi giá trị mà nó trả về. Than ôi .... Tôi đã tìm thấy một cách giải quyết. Tôi đã tạo một tập tin trong thư mục nhà của tôi như vậy
echo $USER > ~/.logname
Khi tôi muốn truy cập tên đăng nhập của mình (ví dụ: gán cho biến Bash g_logname), tôi sẽ làm như vậy:
declare g_logname="$(<~/.logname)";
Điều này làm việc cho tôi, cho dù là bản thân tôi hoặc ở cấp độ gốc thông qua sudo, duy trì việc gán "~" làm thư mục chính của tôi. Tôi có thể tạo tệp .logname cho thư mục chính của mỗi người dùng trên hệ thống. Có, ai đó có thể hack vào máy tính của tôi và thay đổi các tệp này, nhưng tôi không thực sự lo lắng về điều đó. Tôi chỉ muốn kịch bản của tôi hoạt động.