USER
আমার স্ক্রিপ্টে আমার একটি ভেরিয়েবল রয়েছে এবং আমি ভেরিয়েবলের HOME
ভিত্তিতে তার পথটি দেখতে চাই USER
। আমি এটা কিভাবে করবো?
USER
আমার স্ক্রিপ্টে আমার একটি ভেরিয়েবল রয়েছে এবং আমি ভেরিয়েবলের HOME
ভিত্তিতে তার পথটি দেখতে চাই USER
। আমি এটা কিভাবে করবো?
উত্তর:
একটি ইউটিলিটি রয়েছে যা স্থানীয় তথ্য যেমন /etc/passwd
এলডিএপি বা অন্য কোনও পদ্ধতিতে সংরক্ষণ করা হয় তা নির্বিশেষে ব্যবহারকারীর তথ্য অনুসন্ধান করবে । এটি বলা হয় getent
।
এর থেকে ব্যবহারকারীর তথ্য পাওয়ার জন্য, আপনি চালনা করুন getent passwd $USER
। আপনি দেখতে পাবেন এমন একটি লাইন ফিরে পাবেন:
[jenny@sameen ~]$ getent passwd jenny
jenny:*:1001:1001:Jenny Dybedahl:/home/jenny:/usr/local/bin/bash
এখন আপনি কেবল এ থেকে বাড়ির দির কেটে ফেলতে পারেন, যেমন কাটা ব্যবহার করে:
[jenny@sameen ~]$ getent passwd jenny | cut -d: -f6
/home/jenny
~foo
ভেরিয়েবল সঙ্গে bash
। সরাসরি নয়, যাই হোক।
~
ট্যাব-প্রসারিত, যদিও বলে মনে হচ্ছে না, এবং অন্য spec'd আচরণ টিল্ড-উপসর্গ ব্যবহার প্রাপ্ত লগইন নাম যুক্ত প্রাথমিক কাজ ডিরেক্টরির একটি পথনাম দ্বারা প্রতিস্থাপিত হইবে getpwnam()
ফাংশন এবং তাই সম্ভবত লুকআপ বেশ ভাল। আমি ট্যাব-প্রসারণ পছন্দ করি না, যদিও - আমি ট্যাবগুলি টাইপ করতে চাই।
eval
কারওর হোম ডিরেক্টরি পেতে আপনি ব্যবহার করতে পারেন ।
eval echo "~$USER"
কমপক্ষে স্থানীয় ব্যবহারকারীদের জন্য এটি নিশ্চিতভাবে কাজ করে। আমি জানি না এলডিএপি-র মতো দূরবর্তী ব্যবহারকারীরা যদি পরিচালনা করে থাকেন কিনা eval
।
eval
দরকার। ~foo
পরিবর্তনশীল প্রসারণের পরে বাশ প্রক্রিয়া করে না ।
USER
।
$USER
বিস্তৃতি শুধু বর্ণমালা একটি একক পংক্তি।
সাধারণ জায়গাটি /home/$USER
তবে এটি সর্বজনীন হতে পারে না। এই জাতীয় তথ্য অনুসন্ধানের সুনির্দিষ্ট জায়গাটি ফাইলের অভ্যন্তরে /etc/passwd
।
এই ফাইলটি বিশ্ব পঠনযোগ্য (যে কেউ এটি পড়তে পারে), সুতরাং যে কোনও ব্যবহারকারীর এর সামগ্রীতে অ্যাক্সেস রয়েছে।
যদি ফাইলটিতে $ USER উপস্থিত থাকে তবে শেষের প্রবেশটি হ'ল ব্যবহারকারীর হোম ডিরেক্টরি।
এটি এন্ট্রি নির্বাচন করবে এবং হোম ডিরেক্টরি মুদ্রণ করবে:
awk -v FS=':' -v user="$USER" '($1==user) {print $6}' "/etc/passwd"
আরও জটিল (রিমোট) সিস্টেমগুলির জন্য, এনএসএস (নাম পরিষেবা স্যুইচ লাইব্রেরি) সিস্টেম থেকে ব্যবহারকারীদের তথ্য পাওয়ার জন্য জেন্টেন্ট হ'ল সাধারণ আদেশ।
একটি আদেশ
echo $(getent passwd $USER )| cut -d : -f 6
সমপরিমাণ তথ্য সরবরাহ করবে (যদি পাওয়া যায়)।
যদি ব্যবহারকারী উপস্থিত না থাকে তবে getent
একটি ত্রুটি ফিরে আসবে।
এখানে একটি ছোট শেল ফাংশন যা এর প্রস্থান কোডটিকে অগ্রাহ্য করে না getent
:
get_home() {
local result; result="$(getent passwd "$1")" || return
echo $result | cut -d : -f 6
}
এখানে ব্যবহারের উদাহরণ রয়েছে:
da_home="$(get_home missing_user)" || {
echo 'User does NOT exist!'; exit 1
}
# Now do something with $da_home
echo "Home directory is: '$da_home'"
আপনি যদি রুট হিসাবে লগ ইন হয়ে থাকেন, আপনি যদি USER
পাসওয়ার্ডটি জানেন বা যদি USER
পাসওয়ার্ড না থাকে তবে নীচেরটি অন্য একটি বিকল্প:
su -c 'echo ~' ${USER}
স্ট্যান্ডার্ড su
আচরণের অধীনে , যদি USER
অপরিজ্ঞাত বা খালি হয়, তবে su
কমান্ডটি রুট হিসাবে চালানোর চেষ্টা করবে।
তাহলে এর মান USER
একটি বৈধ ব্যবহারকারী নাম নয়, তারপর একটি যথাযথ ত্রুটি উত্থাপিত হবে: su: user <user> does not exist
।
এখানে ইতিমধ্যে প্রচুর ভাল উত্তর রয়েছে তবে এটি এখনও কাউকে সহায়তা করতে পারে।