বাশে আমি বর্তমান ব্যবহারকারীর নামটি কীভাবে পেতে পারি?


320

আমি বাশে এমন একটি প্রোগ্রাম লিখছি যা ব্যবহারকারীর ব্যবহারকারীর নামটি পাওয়া দরকার।

আমি একটি জিনিস বলে শুনেছি whoami, তবে এটি কী করে বা কীভাবে এটি ব্যবহার করবে সে সম্পর্কে আমার কোনও ধারণা নেই।

বর্তমান ব্যবহারকারীর নামটি পেতে আমি কী আদেশ ব্যবহার করব?


দেখে মনে হচ্ছে so USER- র উপর নির্ভর না করে বা আলাদা প্রক্রিয়া না চালিয়ে এখন পর্যন্ত প্রস্তাবিত কোনও পদ্ধতিই কাজ করে না। আলাদা প্রক্রিয়া না চালিয়ে ব্যবহারকারীর নাম পাওয়ার জন্য কি কোনও বাশ অন্তর্নির্মিত নেই?
কলিনম

9
আপনি যখন কোনও কমান্ড শুনেছেন তবে কীভাবে এটি ব্যবহার করবেন তা নিশ্চিত নন, man whoamiডকুমেন্টেশনের জন্য যাচাই করা ভাল সাধারণত প্রথম স্টপ।
মার্ক স্টসবার্গ

উত্তর:


469

কমান্ড লাইনে, প্রবেশ করুন

whoami

অথবা

echo "$USER"

এই মানগুলিকে একটি ভেরিয়েবলে সংরক্ষণ করতে, করুন

myvariable=$(whoami)

অথবা

myvariable=$USER

অবশ্যই, আপনাকে ভেরিয়েবল তৈরি করার দরকার নেই কারণ $USERভেরিয়েবলটি এটিই।


53
কেবলমাত্র একটি দ্রুত দ্রষ্টব্য যে $ ব্যবহারকারী এবং হোয়ামি যদি অন্য ব্যবহারকারী হিসাবে এসএসএসের মাধ্যমে একটি কমান্ড চালাচ্ছেন তবে বিভিন্ন মান প্রদান করে। হোয়ামি ওএস ব্যবহারকারীকে এবং $ ইউএসএফ এসএস ব্যবহারকারীকে ফেরত দেয়।
বিলমান

4
@ বিলম্যান, এর অর্থ কী? আপনি একটি উদাহরণ দিতে পারেন?
দেজয় ক্লেটন

17
কিছু ক্ষেত্রে, $USERএকেবারে সেট করা হয় না। সবচেয়ে খারাপ, এটি কেবল পরিবেশের পরিবর্তনশীল, তাই এটি ব্যবহারকারী দ্বারা ওভাররাইড করা যেতে পারে:USER=thisisnotmyname bash -c 'echo $USER' # prints thisisnotmyname
সীতাকটিফ

1
@ সিটাকটিফ এই সমস্যার সমাধান হিসাবে আপনি কী পরামর্শ দিচ্ছেন?
শেঠমোর্টন

3
@ শেঠমোর্টন আমি বুঝতে পেরেছি যে আমি সমস্যাটিকে সাধারণভাবে তুলনায় আরও খারাপ করে তুলেছি। প্রশ্নের উত্তর দেওয়ার জন্য, যদিও whoami(আপনার পরামর্শ অনুসারে) ব্যবহার করা সমস্যাটি পুরোপুরি দূর করে দেয়, ধরে নেওয়া হচ্ছে ওভাররাইড পরিবেশের ভেরিয়েবলগুলি আপনার প্রসঙ্গে একটি সম্ভাব্য সমস্যা।
সীতাকটিফ

81

এর বিকল্প whoamiহ'ল id -u -n

id -uব্যবহারকারী আইডি প্রদান করবে (উদাহরণস্বরূপ মূলের জন্য 0 )।


5
আমি যদি ভুল করছি এই যদি বহনযোগ্যতা হিসেবে উদ্বেগের বিষয় যেতে উপায় হবে idকমান্ড -uএবং -nপতাকার একটি অংশ posix

3
এটি সত্যই গ্রহণযোগ্য উত্তর হওয়া উচিত। "${USER}"এবং whoamiউভয়ই আপনি কীভাবে লগ ইন করবেন তার উপর নির্ভর করে Spec বিশেষত, লগইন শেল এবং sudo $ USER সেট করে এবং whoamiস্টিডিনের সাথে সংযুক্ত ব্যবহারকারীর দিকে নজর দেয়। তবে আপনি যদি ক্রোন থেকে ব্যাচের কাজ চালাচ্ছেন, বা আপনি রুট থেকে আলাদা ব্যবহারকারী হিসাবে একটি স্টার্টআপ স্ক্রিপ্ট চালাচ্ছেন, তবে এগুলি হয় ভুল ব্যবহারকারীর (রুট) আউটপুট দেবে বা কিছুই হবে না। প্রক্রিয়াটির ব্যবহারকারীর আইডি দেখে এই উত্তরটি সঠিক মান প্রদান করবে।
আসফন্দ কাজী

আপনি যদি আইডির পরিবর্তে ব্যবহারকারীর নাম চান তবে এটি কার্যকর নয়
জোনাথন

3
যদি আপনি অসত্য মন্তব্য যুক্ত করার আগে কমান্ডটি চেষ্টা করে দেখেন তবে আপনি দেখতে পাবেন যে -nমূল প্রশ্নটি জিজ্ঞাসা করা ঠিক একই মতামতটি ব্যবহারকারীর নাম মুদ্রিত করে। নিম্নলিখিতগুলি দেখুন: id -u -nপ্রিন্টগুলি brett- এমনকি ডারউইনেও।
ব্রেট

20

lognameলগ ইন করা ব্যবহারকারীকে পুনরুদ্ধার করতে স্ট্যান্ডার্ড ইউনিক্স / লিনাক্স / বিএসডি / ম্যাকোস কমান্ডটি ব্যবহার করুন। এটি পরিবেশের পাশাপাশি সুডোকেও উপেক্ষা করে, কারণ এগুলি অবিশ্বস্ত সাংবাদিক reporters এটি সর্বদা লগ ইন করা ব্যবহারকারীর নাম মুদ্রণ করবে এবং তারপরে প্রস্থান করবে। এই কমান্ড প্রায় 1981 সাল থেকে প্রায়।

My-Mac:~ devin$ logname
devin
My-Mac:~ devin$ sudo logname
Password:
devin
My-Mac:~ devin$ sudo su -
My-Mac:~ root# logname
devin
My-Mac:~ root# echo $USER
root

17

আমি সোলারিস 9 এবং লিনাক্সে ব্যবহৃত হ্যাক এবং এটি উভয়ের জন্যই দুর্দান্ত কাজ করে:

ps -o user= -p $$ | awk '{print $1}'

এই স্নিপেটটি বর্তমান ইইউইড দিয়ে ব্যবহারকারীর নাম মুদ্রণ করে।

দ্রষ্টব্য: এখানে আপনার দোভাষী হিসাবে বাশ দরকার।

সোলারিসে আপনার উপরে বর্ণিত পদ্ধতিগুলির সাথে সমস্যা রয়েছে:

  • id-uএবং -nপরামিতিগুলি গ্রহণ করে না (সুতরাং আপনাকে আউটপুট পার্স করতে হবে)
  • whoami বিদ্যমান নেই (ডিফল্ট হিসাবে)
  • who am I বর্তমান টার্মিনালের মালিক মুদ্রণ করে (ইডিউ উপেক্ষা করে)
  • $USERভেরিয়েবলটি সঠিকভাবে প্রোফাইল ফাইলগুলি পড়ার পরে সেট করা হয় (উদাহরণস্বরূপ, /etc/profile)

1
দোভাষী হিসাবে আপনার বাশ দরকার কেন? প্রদর্শিত কমান্ড লাইনের কিছুই কোনও শেলের সাথে নির্দিষ্ট বলে মনে হচ্ছে না। বাস্তবে, এমনকি কেন পাইকটি জোর দিয়েই অন্তর্ভুক্ত করে? আমি যতদূর বলতে পারি, psবর্তমান শেলটির পিডের মালিককে প্রদর্শন করার জন্য আপনার কমান্ডটি প্রয়োজনীয় সমস্ত কিছুই।
ঘোটি

আমাদের হিসাবে মানুষের অতিরিক্ত অতিরিক্ত তথ্য উপেক্ষা করা স্বাভাবিক natural অজগর অংশটি ভেরিয়েবলের জন্য বা সাধারণভাবে কম্পিউটারটি এই প্রাথমিক স্তরে এখনও উড়ে অনুমানগুলি করতে পারে না এমন কাঙ্ক্ষিত ডেটা বিচ্ছিন্ন করে।
ব্র্যাডচেস্নি79

সোলারিসে, command -p id(একটি পসিক্স শেল থেকে) বা ব্যবহার করুন /usr/xpg4/bin/id। সোলারিসের আরও সাধারণভাবে, আপনি PATH=70/80 /usr/xpg4/bin/shএর দশকের কমান্ডের সাথে আটকে না যাওয়ার জন্য নিজেকে একটি পজিক্স পরিবেশে ( getconf PATH` এর মতো কিছু দিয়ে চালানোর জন্য নিশ্চিত করতে ) নিজের পরিবেশ পরিবর্তন করতে চান ।
স্টিফেন চেজেলাস

'পিএস: অজানা বিকল্প - ও'
আনন্দ রকজ

12

দুটি আদেশ:

  1. id গ্রুপগুলি সহ ব্যবহারকারী আইডি প্রিন্ট করে। বিন্যাস:uid=usernumber(username) ...

  2. whoami বর্তমান ব্যবহারকারীর নাম দেয়


1
$ হোশামি ব্যাশে ভেরিয়েবল হিসাবে উপলব্ধ নয় । আসলে হোয়ামি কমান্ড কার্যকর করতে আপনাকে ute (হোয়ামি) অথবা `হোয়ামি` করতে হবে!
রুডলফ মায়ার

@ রুডলফায়ার আমি এটিকে ঠিক করেছি
wjandrea

6

যখন স্ক্রিপ্টগুলি ব্যবহার করার সময় মূল (sudo) অনুমতি প্রয়োজন হয় যা সাধারণত 90% + হয়, পূর্ববর্তী উত্তরের পদ্ধতিগুলি সর্বদা আপনাকে rootউত্তর হিসাবে দেয়।

বর্তমান "লগ ইন" ব্যবহারকারীর জন্য ব্যবহারকারী যেমন সহজ সরল, তবে এটির জন্য বিভিন্ন ভেরিয়েবল অ্যাক্সেস করা দরকার: $SUDO_UIDএবং $SUDO_USER

এগুলি প্রতিধ্বনিত হতে পারে:

echo $SUDO_UID
echo $SUDO_USER

বা বরাদ্দ করা হয়েছে, উদাহরণস্বরূপ:

myuid=$SUDO_UID
myuname=$SUDO_USER

6

ইন সোলারিস অপারেটিং সিস্টেম আমি এই কমান্ড ব্যবহৃত:

$ who am i     # Remember to use it with space.

লিনাক্স-তে ইতিমধ্যে কেউ মন্তব্য করে এর উত্তর দিয়েছেন।

$ whoami       # Without space

5

জন্য ব্যাশ , KornShell ( ksh), shইত্যাদি আপনার প্রশ্ন অনেকেই দ্রুত হয় এর উত্তর দেওয়া হয়:

man [function]

আপনি যে সিস্টেমটি ব্যবহার করছেন বা সাধারণত আরও সুবিধার্থে ডকুমেন্টেশন পেতে:

গুগল "ম্যান ফাংশন"

লিনাক্স এবং ইউনিক্সের মধ্যে কিছুটা পার্থক্য রয়েছে এমন কিছু জিনিসের জন্য এটি বিভিন্ন ফলাফল দিতে পারে।

এই প্রশ্নের জন্য, আপনার শেলের মধ্যে কেবল "হোয়ামি" লিখুন।

এটি স্ক্রিপ্ট করতে:

myvar=$(whoami)

2

বর্তমান ব্যবহারকারীর ব্যবহারকারীর নামটি ${parameter@operator}প্যারামিটার সম্প্রসারণের সাথে খাঁটি বাশে অর্জন করতে পারে (বাশ ৪.৪ এ প্রবর্তিত):

$ : \\u
$ printf '%s\n' "${_@P}"

:বিল্ট-ইন (এর সমার্থক true) গত যুক্তি, যা মধ্যে সংরক্ষিত হয় সেটিং দ্বারা একটি অস্থায়ী পরিবর্তনশীল পরিবর্তে ব্যবহার করা হয় $_। আমরা তখন এটি প্রসারিত করব ( \u) যেন এটি Pঅপারেটরের সাথে প্রম্পট স্ট্রিং ।

এটি ব্যবহারের চেয়ে ভাল $USER, যেমন $USERকেবল একটি নিয়মিত পরিবেশগত পরিবর্তনশীল; এটি সংশোধন, আনসেট ইত্যাদি করা যেতে পারে এমনকি যদি এটি ইচ্ছাকৃতভাবে ছত্রভঙ্গ না করা হয় তবে লগইন শেল ( suডিফল্ট) চালু না করে ব্যবহারকারীর স্যুইচ করা থাকলে এমন একটি সাধারণ ক্ষেত্রে এটি এখনও ভুল ।


1

উপর সবচেয়ে লিনাক্স সিস্টেম, কেবল টাইপ whoami কমান্ড লাইন ব্যবহারকারী আইডি প্রদান করে।

তবে সোলারিসে আপনাকে নীচের কমান্ডের সাহায্যে লগ-ইন করা ইউজারের ইউআইডি নির্ধারণ করে ইউজার আইডি নির্ধারণ করতে হতে পারে।

echo $UID

একবার ইউআইডি জানা হয়ে গেলে, /etc/passwdফাইলটির বিপরীতে ইউআইডি মেলে ব্যবহারকারীকে সন্ধান করুন।

cat /etc/passwd | cut -d":" -f1,3

-4

বর্তমান টাস্কটির ব্যবহারকারীর_স্ক্র্টটি পান

#define get_current_user()              \
({                                      \
    struct user_struct *__u;            \
    const struct cred *__cred;          \
    __cred = current_cred();            \
    __u = get_uid(__cred->user);        \
    __u;                                \
})

2
প্রশ্নটি কীভাবে ব্যাশ স্ক্রিপ্টের মধ্যে ব্যবহারকারীর নামটি পাওয়া যায় সে সম্পর্কে ছিল। এই উত্তরটি কীভাবে লিনাক্স কার্নেলের অভ্যন্তরীণ সি কোড থেকে (যেমন একটি কাস্টম লিনাক্স কার্নেল মডিউল থেকে) সংখ্যক ব্যবহারকারী আইডি (ব্যবহারকারীর নাম নয়) পাবেন) এটি যে প্রশ্নটি করা হয়েছিল তার উত্তর নয়, এটি একটি পৃথক প্রশ্নের উত্তর।
সাইমন কিসনে
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.