2009-09-04 27 views
25

Tôi có một tập lệnh cần biết tên người dùng đang chạy.Tôi làm cách nào để có được tên người dùng thực thi tập lệnh Perl của mình?

Khi tôi chạy nó từ trình bao, tôi có thể dễ dàng sử dụng $ ENV {"USER"}, được cung cấp bởi bash.

Nhưng rõ ràng - thì tập lệnh tương tự được chạy từ cron, cũng thông qua bash - $ ENV {"USER"} không được xác định.

Tất nhiên, tôi có thể:

my $username = getpwuid($<); 

Nhưng nó không nhìn đẹp - là có bất kỳ/cách đẹp hơn tốt hơn? Nó không phải là hệ thống độc lập, vì kịch bản là để sử dụng cá nhân của tôi, và sẽ chỉ chạy trên Linux.

Trả lời

9

bộ crontab $LOGNAME để bạn có thể sử dụng $ENV{"LOGNAME"}. $LOGNAME cũng được đặt trong môi trường của tôi theo mặc định (chưa xem nơi nó được đặt mặc dù) để bạn có thể chỉ sử dụng $LOGNAME thay vì $USER.

Mặc dù tôi đồng ý với hacker, không biết có gì sai về số getpwuid.

2

Xin lỗi, tại sao điều đó không "đẹp"? Đó là cuộc gọi hệ thống thích hợp để sử dụng. Nếu bạn muốn một chương trình bên ngoài gọi ra (ví dụ: bạn cũng có thể sử dụng một tập lệnh bash), có các công cụ/usr/bin/id và/usr/bin/whoami để sử dụng.

8

Cái này trông đẹp hơn?

use English qw(−no_match_vars); 

my $username = getpwuid $UID; 
+2

Heh. Trong mã thực tế của tôi, tôi (tất nhiên) sử dụng tiếng Anh, và tôi thực sự sử dụng $ REAL_USER_ID, nhưng tôi không muốn châm biếm bất kỳ cuộc tranh luận "Tiếng Anh so với tên ngắn" ở đây :) –

+0

Trong mã của tôi, tôi sẽ sử dụng ' $ <', vì vậy đó không phải là một cuộc tranh luận mà tôi quan tâm, nhưng tôi nghĩ bạn có thể coi nó đẹp hơn. –

45

Hãy thử lấy câu trả lời của bạn từ một số nơi, người đầu tiên chiến thắng:

my $username = $ENV{LOGNAME} || $ENV{USER} || getpwuid($<); 
Các vấn đề liên quan