الحصول على $USER داخل البرنامج النصي Shell عند التشغيل مع sudo؟

StackOverflow https://stackoverflow.com/questions/1629605

سؤال

كيف يمكنني الحصول على $USER الصحيح إذا قمت بتشغيل برنامج نصي Shell باستخدام sudo؟

أقوم بتشغيلها كبرامج نصية لما بعد التثبيت في حزمة تثبيت Mac، حيث يتم تعديلها تلقائيًا، ولكنني بحاجة إلى القيام بأشياء باستخدام اسم المستخدم.

$HOME صحيح، بالرغم من ذلك.ستكون الطريقة غير الأنيقة هي استخراج الاسم من مسار المنزل، لكنني أتساءل عما إذا كانت هناك طريقة طبيعية للقيام بذلك.

لا أستطيع التأثير على الطريقة التي يتم بها استدعاء البرامج النصية، حيث إنها مكالمة تلقائية داخل برنامج التثبيت.

هل كانت مفيدة؟

المحلول

في نظام بلدي يتم تعيين $SUDO_USER متغير لاسم المستخدم المتصل.

ويجب عدم استخراج اسم المستخدم من متغير ${HOME} مباشرة. يجري تكوينه وغير محسوبة. استخراج اسم المستخدم الذي يمكن أن نلقي نظرة إلى ملف /etc/passwd، ولكن هذا هو النظام نفسه تعتمد، على سبيل المثال في بعض الأحيان لا بد من النظر إلى دليل LDAP أو يتم نشر مقالات خلال شيكل ...

نصائح أخرى

ويمكنك استخدام $(logname)، والتي ترجع اسم الدخول الخاص بك حتى لو كنت sudoing حاليا.

فحص المتغير SUDO_USER.

http://www.gratisoft.us/sudo/man/sudo.html#environment

هناك طريقة أخرى للحصول على المستخدم وهي عبر من يأمر.يكون هذا مفيدًا في بعض الأحيان عندما لا تهتم بما إذا كان المستخدم قد قام بـ sudo'd أم لا.

who -m | awk '{print $1;}'

وSUDO_USER ليس المحمولة. انها ضبطه على فيدورا 17.

والمتغيرات $USER و$UID لا يمكن التنبؤ بها عند استدعاء سودو سواء. وتفيد بعض توزيعات لsudoer، والبعض الآخر يقدم تقريرا المستخدم الجذر.

وانها لم تبلغ حد الكمال، ولكن هل يمكن استخدام test -w ~root && echo I have write access to ~root.

مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top