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।
এখানে ইতিমধ্যে প্রচুর ভাল উত্তর রয়েছে তবে এটি এখনও কাউকে সহায়তা করতে পারে।