সুডো হিসাবে ব্যাশ স্ক্রিপ্ট কার্যকর করা ব্যবহারকারীর নাম কীভাবে পাবেন?


17

আমি একটি বাশ স্ক্রিপ্ট তৈরি করতে চাই যা অবশ্যই sudo দিয়ে মৃত্যুদন্ড কার্যকর করা উচিত তবে এটি কার্যকর করা নন-সুডো ব্যবহারকারীর নামটি বিবেচনা করা উচিত। সুতরাং যদি ব্যবহারকারী bobচালায় তবে sudo ./myscript.shআমি জানতে চাই myscript.shযে bobকে এটি সম্পাদন করেছে।

আসুন ভিতরে তাকান myscript.sh:

USER=$(whoami)
# Do something that takes into account the username.

প্রক্রিয়াটি তৈরি করেছেন এমন ব্যবহারকারীর নাম আমি কীভাবে জানতে পারি? আরো নির্দিষ্টভাবে, কি আমি বদলে ব্যবহার করা উচিত whoamiপেতে bobএবং root?


এটি কোনও বৈধ স্ক্রিপ্ট নয়, আমি মনে করি আপনি বোঝাতে চেয়েছিলেন USER=$(whoami)। নোট করুন যে USERইতিমধ্যে শেল অভ্যন্তরীণ ভেরিয়েবল হিসাবে বিদ্যমান। এছাড়াও, যদি এটি একটি ব্যাশ স্ক্রিপ্টের, না এটি ব্যবহার চালানোর shএকমাত্র বৈশিষ্ট্য POSIX সামঞ্জস্যপূর্ণ উপসেট রয়েছে।
nyuszika7h

কেন সম্পাদনা করবেন না? ঠিক এখন।
মারসিও

এটি খুব তুচ্ছ, সম্পাদনাগুলির কমপক্ষে suggested টি অক্ষর হওয়া উচিত, কমপক্ষে প্রস্তাবিত অক্ষর।
nyuszika7h

ঠিক আছে আমি বুঝতে পারছি. টিপসের জন্য ধন্যবাদ: ডিআই সাধারণত #!/usr/bin/env bashআমার ব্যাশ স্ক্রিপ্টগুলিতে হ্যাশব্যাং রাখে ।
মারসিও

যদি আপনি এটিকে স্পষ্টভাবে shবা অন্য কোনও কিছুতে কল করেন তবে হ্যাশবাংটিকে উপেক্ষা করা হবে।
nyuszika7h

উত্তর:


28

এটি কতটা মানসম্পন্ন তা আমি নিশ্চিত নই, তবে কমপক্ষে উবুন্টু সিস্টেমে sudoনিম্নলিখিত পরিবেশের ভেরিয়েবলগুলি সেট করে (অন্যদের মধ্যে - ENVIRONMENTসুডো ম্যানপেজের বিভাগটি দেখুন ):

   SUDO_UID        Set to the user ID of the user who invoked sudo

   SUDO_USER       Set to the login of the user who invoked sudo

উদাহরণ স্বরূপ,

steeldriver@lap-t61p:~$ sudo sh -c 'whoami'
root
steeldriver@lap-t61p:~$ sudo sh -c 'echo $SUDO_USER'
steeldriver

আমি পরীক্ষিত সমস্ত প্ল্যাটফর্মগুলিতে প্রত্যাশা অনুযায়ী কাজ করে: ডিবিয়ান, ফেডোরা (রেডহ্যাট) এবং ফ্রিবিএসডি। ধন্যবাদ!
মারসিও

ম্যাকের সাথে কাজ করার বিষয়টি নিশ্চিত করেছেন।
সিকিং

উবুন্টুতেও কাজ করে।
অ্যান্ডি জে

9

আপনি যদি এটির sudoপাশাপাশি কাজ করতে চান তবে ব্যবহার করুন ${SUDO_USER:-$USER}। উদাহরণ স্বরূপ:

printf '%s\n' "${SUDO_USER:-$USER}"

ব্যাখ্যা

${var:-val}প্রসারিত হবে $var, যদি না তা সেট না বা খালি, যে ক্ষেত্রে এটি প্রসারিত হবে val

আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.