Làm cách nào để lấy tên của người dùng đang hoạt động thông qua dòng lệnh trong OS X?
Làm cách nào để lấy tên của người dùng đang hoạt động thông qua dòng lệnh trong OS X?
Câu trả lời:
vì 'whoami' đã bị loại bỏ, nó có thể tương thích về phía trước hơn để sử dụng:
id -un
whoami
trên Leopard xác nhận rằng nó đã được thay thế bằng id
.
Tôi khá chắc chắn rằng thiết bị đầu cuối trong OS X cũng giống như unix, vì vậy lệnh sẽ là:
whoami
Tôi không có một chiếc mac trên người vào lúc này nên ai đó sẽ sửa cho tôi nếu tôi sai.
LƯU Ý - whoami
Tiện ích đã được xóa bỏ, và tương đương với id -un
. Nó sẽ cung cấp cho bạn người dùng hiện tại
Nếu bạn muốn biết ai hiện đang đăng nhập vào hệ thống:
$ w 15:56:14 trong 5 ngày, 20:58, 6 người dùng, tải trung bình: 0,43, 0,53, 0,50 NGƯỜI DÙNG TTY ĐĂNG NHẬP @ IDLE JCPU PCPU GÌ tôi pts / 2 T619 1: 03 phút 0,98 giây 0,98 giây - / bin / bash tôi pts / 3 09:55 6: 00 phút 0,43 giây 0,43 giây / bin / bash tôi pts / 5 15:56 0,00 giây 0,23 giây 0,00 giây
(Đây là từ hệ thống Linux; định dạng trên OS X có thể hơi khác, nhưng thông tin phải giống nhau.)
Có thể có nhiều phiên đăng nhập; Xét cho cùng, UNIX được thiết kế để trở thành một hệ thống nhiều người dùng.
Bạn cũng có thể sử dụng logname
lệnh từ Sách hướng dẫn sử dụng lệnh chung BSD trong Linux hoặc MacOS để xem tên người dùng của người dùng hiện đang đăng nhập, ngay cả khi người dùng đang thực hiện một sudo
thao tác. Điều này rất hữu ích, chẳng hạn, khi sửa đổi crontab của người dùng trong khi cài đặt gói toàn hệ thống với sudo:crontab -u $(logname)
Per man logname
:
LOGNAME(1)
NAME
logname -- display user's login name
Câu hỏi vẫn chưa được trả lời hoàn toàn, IMHO. Tôi sẽ cố gắng giải thích: Tôi có một mục crontab lên lịch cho một thủ tục lệnh bash shell, đến lượt nó thực hiện một số thao tác dọn dẹp các tệp của tôi; và khi hoàn tất, hãy gửi thông báo cho tôi bằng trung tâm thông báo OS X (kèm theo lệnh osascript -e 'display notification ...
). Nếu ai đó (ví dụ như vợ tôi hoặc con gái tôi) chuyển người dùng hiện tại của máy tính sang cô ấy, để tôi ở chế độ nền, thì tập lệnh cron sẽ không thành công khi gửi thông báo.
Vì vậy, Ai là người dùng hiện tại có nghĩa là Có một số người khác trở thành người dùng hiệu quả để tôi ở chế độ nền không? Có stat -f "%Su" /dev/console
trả về tên người dùng hoạt động hiện tại không?
Câu trả lời là có; vì vậy, bây giờ tập lệnh shell crontab của tôi đã được sửa đổi theo cách sau:
...
if [ "$(/usr/bin/stat -f ""%Su"" /dev/console)" = "loreti" ]
then /usr/bin/osascript -e \
'display notification "Cleanup done" sound name "sosumi" with title "myCleanup"'
fi
Có hai cách-
whoami
hoặc là
echo $USER
Bạn cũng có thể truy xuất nó từ các biến môi trường, nhưng điều đó có lẽ không an toàn, vì vậy tôi sẽ đi với câu trả lời của Andrew.
printenv USER
Nếu bạn cần lấy nó từ một ứng dụng, chẳng hạn như Node, thì việc lấy nó từ các biến môi trường, chẳng hạn như
process.env.USER
.
Xác định 'người dùng đang hoạt động'.
Nếu câu hỏi là 'ai là người dùng đã đăng nhập', thì 'tôi là ai' hoặc 'whoami' đều được (mặc dù họ đưa ra các câu trả lời khác nhau - 'whoami' chỉ báo cáo tên người dùng; 'tôi là ai' báo cáo trên thiết bị đầu cuối và thời gian đăng nhập quá).
Nếu câu hỏi là 'ID người dùng nào là ID hiệu quả cho trình bao', thì thường tốt hơn là sử dụng 'id'. Điều này báo cáo về ID người dùng và ID nhóm thực và hiệu quả, và cả ID nhóm bổ sung. Điều này có thể quan trọng nếu trình bao đang chạy SUID hoặc SGID.