2009-09-04 26 views
25

मेरे पास एक स्क्रिप्ट है जिसे यह जानने की आवश्यकता है कि यह किस उपयोगकर्ता नाम से चलाया जाता है।मैं अपने पर्ल स्क्रिप्ट को निष्पादित करने वाले उपयोगकर्ता का नाम कैसे प्राप्त कर सकता हूं?

जब मैं इसे खोल से चलाता हूं, तो मैं आसानी से $ ENV {"USER"} का उपयोग कर सकता हूं, जो बाश द्वारा प्रदान किया जाता है।

लेकिन स्पष्ट रूप से - फिर उसी स्क्रिप्ट को क्रॉन से चलाया जाता है, बैश के माध्यम से भी - $ ENV {"USER"} परिभाषित नहीं किया जाता है।

बेशक

, मैं कर सकते हैं:

my $username = getpwuid($<); 

लेकिन यह अच्छा नहीं लगता है - क्या कोई बेहतर/अच्छे तरीका है? यह सिस्टम-स्वतंत्र होने की आवश्यकता नहीं है, क्योंकि स्क्रिप्ट मेरे व्यक्तिगत उपयोग के लिए है, और केवल लिनक्स पर ही चलती है।

उत्तर

9

crontab सेट $LOGNAME ताकि आप $ENV{"LOGNAME"} का उपयोग कर सकें। $LOGNAME डिफ़ॉल्ट रूप से मेरे पर्यावरण में भी सेट है (यह नहीं देखा गया है कि यह कहां सेट हो जाता है) ताकि आप $USER के बजाय केवल $LOGNAME का उपयोग कर सकें।

हालांकि मैं हैकर से सहमत हूं, यह नहीं पता कि getpwuid के बारे में क्या गलत है।

2

क्षमा करें, वह "अच्छा लग रहा है" क्यों नहीं? उपयोग करने के लिए यह उचित सिस्टम कॉल है। यदि आप एक बाहरी कार्यक्रम को आमंत्रित करना चाहते हैं (उदाहरण के लिए आप किसी भी बैश स्क्रिप्ट से भी उपयोग कर सकते हैं), तो उपकरण/usr/bin/id और/usr/bin/whoami उपयोग के लिए हैं।

8

क्या यह सुंदर दिखता है?

use English qw(−no_match_vars); 

my $username = getpwuid $UID; 
+2

हे। मेरे वास्तविक कोड में, मैं (निश्चित रूप से) अंग्रेजी का उपयोग करता हूं, और मैं वास्तव में $ REAL_USER_ID का उपयोग करता हूं, लेकिन मैं यहां किसी भी "अंग्रेजी बनाम लघु-नाम" बहस को चमकाना नहीं चाहता था :) –

+0

मेरे कोड में मैं ' $ <', इसलिए यह बहस नहीं है जिस पर मुझे परवाह है, लेकिन मैंने सोचा कि आप इसे सुंदर मान सकते हैं। –

45

कई स्थानों से आपका जवाब हो रही कोशिश करो, पहले एक जीतता है:

my $username = $ENV{LOGNAME} || $ENV{USER} || getpwuid($<); 
संबंधित मुद्दे

 संबंधित मुद्दे