শেল স্ক্রিপ্টের মধ্যে ব্যবহারকারীর ডিফল্ট শেলটি সন্ধান করা


10

আমি ভাবছিলাম যে কোনও শেল স্ক্রিপ্টের মধ্যে বর্তমান ব্যবহারকারীর ডিফল্ট শেলটি খুঁজে পাওয়ার কোনও উপায় আছে?

কেস ব্যবহার করুন: আমি এমন একটি স্ক্রিপ্টে কাজ করছি যা একটি কমান্ডের জন্য একটি উপাম নির্ধারণ করে এবং এই উলামটি শেল স্ক্রিপ্টের মধ্যে সেট করা থাকে।

!# /bin/bash
alias = 'some command to set the alias'

স্ক্রিপ্টটিতে একটি যুক্তি রয়েছে যেখানে এটি ব্যবহারকারীর ডিফল্ট শেল সন্ধান করার চেষ্টা করে যা স্ক্রিপ্টটি কার্যকর করে এবং এই alias / .bashrc বা ~ / .zshrc ফাইলটিতে এই উপনাম যুক্ত করে

তবে আমি যখন স্ক্রিপ্টের সামনের অংশে একটি শেবাং যুক্ত করছি এবং স্পষ্টরূপে এটি ব্যাশ ব্যবহার করতে বলছি, এখানে পোস্ট করা উত্তরগুলি সর্বদা প্রত্যাশিতভাবে ব্যাশ প্রত্যাবর্তন করে যদিও আমি জেডএসএইচ টার্মিনালে এই স্ক্রিপ্টটি সম্পাদন করছি।

শেল টাইপ পাওয়ার কোনও উপায় আছে যেখানে শিবাং সেট নির্বিশেষে স্ক্রিপ্টটি কার্যকর করা হয়?

আমি এমন একটি সমাধান খুঁজছি যা ম্যাক এবং সমস্ত লিনাক্স ভিত্তিক বিস্ট্রো উভয়ের জন্যই কাজ করে।


@ স্টেফেনরউচ আমার আগে এটি উল্লেখ করা উচিত ছিল, আমি এমন একটি পদ্ধতি খুঁজছি যা ম্যাক এবং লিনাক্স ভিত্তিক উভয় সিস্টেমে কাজ করে। / ইত্যাদি / ম্যাকের পাসউইডিতে ব্যবহারকারীর তথ্য থাকে না এবং এটি কেবলমাত্র একক ব্যবহারকারী মোডে পরামর্শ করা হয়।
স্প্যানিয়ার্ড

/etc/passwdওএসএক্সে কী আছে? আমি অনলাইনে একটি তাত্ক্ষণিকভাবে নজর রেখেছি এবং এটি শেলটি উপস্থিত রয়েছে, কেবল ব্যবহারকারীর নাম নয়। ব্যবহারকারী আইডি এখনও আছে, আপনি কেন এটি ব্যবহার করবেন না?
টেরডন

আমি ভাবছি শেলগুলির একটি সম্পূর্ণ তালিকা থাকাও সম্ভব কিনা I'd বা সমস্ত শেল স্টার্টআপ ফাইল সর্বদা। _ Name_of_shell} rc এর সাথে সামঞ্জস্য হয়?
জামেস্কেফ

উত্তর:


6
$ finger $USER|grep -oP 'Shell: \K.*'
/bin/mksh

ধন্যবাদ এটি একটি কবজ মত কাজ করে! এটিই কেবলমাত্র সমাধান যা সম্ভবত ম্যাক এবং লিনাক্স ভিত্তিক বিস্ট্রো উভয়ের জন্যই কাজ করে।
স্প্যানিয়ার্ড

1
বিটিডাব্লু, কমান্ডটি কিছুটা এডিট করে এটিকে সমস্ত ওএস-এ অ্যাগনস্টিক করার finger $USER | grep 'Shell:*' | cut -f3 -d ":"জন্য গ্রেপ অপশন-পি ম্যাকের সমর্থিত নয়।
স্প্যানিয়ার্ড

2
নোট করুন যে fingerসমস্ত মেশিনে ইনস্টল করা নাও হতে পারে। এটি রেডহ্যাট ভিত্তিক সিস্টেমে optionচ্ছিক প্যাকেজ।
স্টিফেন হ্যারিস

1
@ কিশোরপান্ডে: আপনি getent|grep ^$USER:|cut -f: -f7যদি আঙুলটি ডিফল্টরূপে ইনস্টল না করে থাকেন তবে আঙ্গুলের পরিবর্তে আপনি ব্যবহার করতে পারেন ।
ইপোর সিরসর

@ কিশোরপান্ডে এটি করবেন না SHELLপরিবেশের পরিবর্তনশীল উপস্থিত থাকলে ব্যবহার করুন । ব্যবহারকারীর ডাটাবেসের দিকে তাকানো আপনাকে একটি ফলাফল দেবে (ব্যবহারকারীর লগইন শেল) তবে এটি সঠিক ফলাফল নাও হতে পারে (ব্যবহারকারীর প্রিয় ইন্টারেক্টিভ শেল) - এটি ব্যবহারকারীর কনফিগারেশনের উপর নির্ভর করে।
গিলস'স 23-৩৩

19

পরিবেশ পরিবর্তনশীল, SHELLসর্বদা আমন্ত্রণকারী ব্যবহারকারীর ডিফল্ট লগইন শেলটিতে প্রসারিত হবে (এর থেকে মান পাবে /etc/passwd)।

অন্য প্রদত্ত ব্যবহারকারীর জন্য আপনার কিছু প্রসেসিং করা দরকার /etc/passwd, এটি একটি সাধারণ awkস্নিপেট:

awk -F: -v user="foobar" '$1 == user {print $NF}' /etc/passwd

foobarপ্রকৃত ব্যবহারকারীর নামটি দিয়ে প্রতিস্থাপন করুন ।

আপনার যদি ldap(বা স্থানে অনুরূপ কিছু) থাকে, getentসরাসরি পার্সিংয়ের পরিবর্তে ডাটাবেসগুলি পেতে ব্যবহার করুন /etc/passwd:

getent passwd | awk -F: -v user="foobar" '$1 == user {print $NF}'

বা পরিষ্কার পদ্ধতিতে, getentপার্সিংটি করা যাক (@ কুশালানন্দকে ধন্যবাদ):

getent passwd foobar | awk -F: '{print $NF}'

3
getent passwd foobarকোনও নির্দিষ্ট লাইনের সাথে মিল রাখতে হবে।
কুসালানন্দ

উত্তরের জন্য ধন্যবাদ. আমার আগে এটি উল্লেখ করা উচিত ছিল, আমি এমন একটি পদ্ধতি খুঁজছি যা ম্যাক এবং লিনাক্স ভিত্তিক উভয় সিস্টেমে কাজ করে। / ইত্যাদি / ম্যাকের পাসউইডিতে ব্যবহারকারীর তথ্য থাকে না এবং এটি কেবলমাত্র একক ব্যবহারকারী মোডে পরামর্শ করা হয়।
স্প্যানিয়ার্ড

4

যেহেতু getentMacOS এ কোনও স্ট্যান্ডার্ড কমান্ড নয়, আপনি নিম্ন স্তরের getpwuidকলটি ব্যবহার করতে চাইতে পারেন যা মেশিনটি কনফিগার করা নামকরণ পরিষেবাদিগুলির জন্য পরামর্শ করবে। এটির জন্য কল করতে perlবা প্রয়োজন হতে পারে pythonযা বেশিরভাগ ইউনিক্সের মতো প্ল্যাটফর্মগুলিতে সাধারণ

যেমন এটি বর্তমান ব্যবহারকারীর জন্য শেলটি ফিরিয়ে দেবে:

perl -e '@x=getpwuid($<); print $x[8]'

2

আপনি পরিবেশের থেকে এটির মতো ব্যবহারকারীর ডিফল্ট শেলটি পেতে পারেন:

echo $SHELL

তবে এটির মতো নয়:

echo $0

পরবর্তীকর্ম আপনাকে কেবলমাত্র আপনার স্ক্রিপ্টটি কী শেল ব্যবহার করছে তা বলবে। সুতরাং আপনি উপরের প্রথম বিকল্পটি চান।



0

হয়তো এই:

   grep $USER </etc/passwd | cut -f 7 -d ":"

ইতিমধ্যে প্রদত্ত উত্তরের কোনওটিতে এটি উন্নতি হয় না।
কুসালানন্দ

যদি একাধিক ব্যবহারকারী সাধারণভাবে কাজ করে তবে এটি কাজ করবে না; যেমন যদি USER=fredতারপর এই ম্যাচ হবে fred, frederick, alfred, alfredo...
স্টিফেন হ্যারিস
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.