আমার সিসাদমিন আমাকে এটি পরিবর্তন করতে অস্বীকার করলে আমি কীভাবে আমার লগইন শেল হিসাবে ব্যাশ ব্যবহার করতে পারি?


38

UNIX sysadmin আমি কোথায় কাজ করছি আমাকে অ্যাক্সেস দিতে থেকে আমার লগ-ইন শেল পরিবর্তন করতে অনিচ্ছুক kshকরতে bash। তিনি বিভিন্ন অজুহাত দিয়েছেন, মজার বিষয় হ'ল যেহেতু তারা তাদের সমস্ত স্ক্রিপ্টগুলি লেখেন কারণ তারা kshচালানোর চেষ্টা করলে তারা কাজ করবে না। আমি জানি না তিনি এই ধারণাগুলি কোথায় পেয়েছেন, তবে যেহেতু আমি তাকে বোঝাতে পারি না, আমার কি বিকল্প আছে?

( chshএই মেশিনগুলিতে ইনস্টল করা আছে, তবে আমরা লগ ইন করার জন্য পাবলিক / প্রাইভেট কীগুলি ব্যবহার করি এবং আমার কোনও পাসওয়ার্ড নেই, তাই যখন chshআমাকে পাসওয়ার্ডের জন্য অনুরোধ জানানো হয় তখন আমার তা দেওয়ার কিছুই নেই))

উত্তর:


69

আপনি লগ ইন করার সময় ফাইলটি ~/.profileলগইন শেল (আপনার জন্য কেএসএস) দ্বারা পড়ে। ব্যাশ দ্বারা নিজেকে প্রতিস্থাপন করতে আপনি যে লগইন শেলটি নির্দেশ করতে পারেন। আপনার কিছু সতর্কতা অবলম্বন করা উচিত:

  • লগইন শেলটি যদি ইন্টারেক্টিভ হয় তবে কেবল তা প্রতিস্থাপন করুন। এটি গুরুত্বপূর্ণ: অন্যথায়, গ্রাফিক মোডে লগইন কাজ করতে পারে না (এটি সিস্টেম-নির্ভর: কিছু কিছু তবে ~/.profileএক্সডিএম বা অনুরূপ মাধ্যমে লগ ইন করার সময় সমস্ত সিস্টেম পড়েন না ), এবং আইডিমগুলি যেমন ssh foo '. ~/.profile; mycommand'ব্যর্থ হবে।
  • বাশ উপলভ্য আছে কিনা তা পরীক্ষা করুন, যাতে কার্যকর কারণে যদি কোনও কারণে সেখানে না থাকে তবে আপনি এখনও লগ ইন করতে পারেন।

লগইন শেল হিসাবে বাশ চালাতে হবে কিনা আপনার একটি পছন্দ আছে। এটি লগইন শেল তৈরির একমাত্র প্রধান পার্থক্য হ'ল এটি লোড হবে ~/.bash_profileবা হবে ~/.profile। সুতরাং আপনি যদি লগইন শেল হিসাবে ব্যাশ চালনা করেন তবে খুব সতর্কতা অবলম্বন করুন যাতে ~/.bash_profileবাশ পুনরাবৃত্তভাবে চালিত না হয় সেদিকে খেয়াল রাখুন ~/.profile~/.profileKsh এর চেয়ে বাশ দ্বারা মৃত্যুদণ্ড কার্যকর করার কোনও আসল সুবিধা নেই , তাই আমি এটি না করার পরামর্শ দিই।

SHELLপরিবেশকে পরিবর্তনশীল বাশকেও সেট করুন , যাতে টার্মিনাল এমুলেটরগুলির মতো প্রোগ্রামগুলি সেই শেলটি শুরু করে।

বাশে স্যুইচ করার কোড এখানে। এটি শেষে রাখুন ~/.profile

case $- in
  *i*)
    # Interactive session. Try switching to bash.
    if [ -z "$BASH" ]; then # do nothing if running under bash already
      bash=$(command -v bash)
      if [ -x "$bash" ]; then
        export SHELL="$bash"
        exec "$bash"
      fi
    fi
esac

17
দুর্দান্ত উত্তর! স্ট্যাকেক্সচেঞ্জের একটি বিয়ার প্রেরণ বোতামটি দরকার: এটি এমন সময় হবে যা আমি এটি ব্যবহার করব।
আইকনোক্লাস্ট

ধন্যবাদ প্রথমে এবং। .profileশুধুমাত্র লগইন শেল (ওপি প্রয়োজন হিসাবে) জন্য কাজ করে। লিনাক্স ওয়ার্কস্টেশনটিতে লগইন করতে আমি উইন্ডোজ 10 এর রিমোট ডেস্কটপ সংযোগ ব্যবহার করি, তারপরে জিনোমে টার্মিনালটি খুলি। zshআমার সিসাদমিন আমাকে দেওয়ার সময় আমি চাই bash। এই ক্ষেত্রে, আমি .bashrcপরিবর্তে স্নিপেট যোগ করতে হবে .profile
উইকএন্ড

12

এটি সামান্য কালডজে, তবে আপনি নিজের হোম ডিরেক্টরিতে bashএকটি .profileফাইল তৈরি করে লগইন করার সময় ব্যবহার করছেন শেল হতে পারে

SHELL=`type -P bash`
exec bash -l

এটি kshঅধিবেশনটির সাথে একটি bashসেশনের পরিবর্তিত হবে। আপনাকে দুবার exit(বা ^D) টাইপ করতে হবে না , যেমন আপনি bashপ্রতিটি সময় লগইন করে ম্যানুয়ালি কোনও নতুন অধিবেশন শুরু করেন And

echo $SHELL

এমনকি পথ ফিরে আসবে bash


3
আপনি অবশ্যই পরিবর্তন করতে পারবেন the এক্সিকিউটরের আগে এটি করার জন্য একটি লাইন যুক্ত করে মোটামুটি সহজেই বিক্রয় করুন EL
ডার্বোবার্ট

2
আপনি যদি নতুন শেলটিও লগইন শেল হিসাবে চান তবে আপনার সম্ভবত হওয়া উচিত exec bash -l
jw013

1
একটা শেষ মন্তব্য: typeহয় সুপারিশ উপর which
jw013

1
আমি পাই না! এইভাবে একটি অসীম লুপ তৈরি করে bashপড়বে না .profile? আমি লাইন বরাবর কিছু একমত exec bashকি আপনি চান, কিন্তু আপনি করতে হবে নিশ্চিত করুন যে আপনি এটা করতে শুধুমাত্র আপনার লগইন ksh তাই কিছু যদি-বিবৃতি প্রয়োজন হয়!
বনাঙ্গুইন

1
@ ব্যবহারকারী1129682 না থাকলে ~/.bash_profileবা না~/.bash_login
উলরিচ ড্যাঙ্গেল

4

বাশ কার্যকর করার সময় গিলসের উত্তরে -l পতাকা যুক্ত হওয়া উচিত, যাতে কোনও নতুন ল্যাশ শেলের মধ্যে যে কোনও লগইন প্রোফাইল স্ক্রিপ্টগুলি উত্সাহিত হয়। (উদাহরণস্বরূপ /etc/profile.d/ তে আরএইচইএল-তে কিছু)। স্ক্রিপ্টটি তখন হওয়া উচিত:

case $- in
  *i*)
    # Interactive session. Try switching to bash.
    if [ -z "$BASH" ]; then # do nothing if running under bash already
      bash=$(command -v bash)
      if [ -x "$bash" ]; then
        export SHELL="$bash"
        exec "$bash" -l
      fi
    fi
esac

আপনি -lবিকল্পটি যুক্ত করতে কেন বলছেন তা ব্যাখ্যা করতে পারেন ? আমি এটি কোনও সমস্যা ছাড়াই কয়েক মাস ধরে ব্যবহার করছি।
২২ শে

1

csh/tcsh@ গিলিস দ্বারা শীর্ষে ভোট দেওয়া দ্বারা অনুপ্রেরণার একটি উত্তর হ'ল

if ( ! $?BASH ) then
  setenv BASH `command -v bash`
endif

if ( $?prompt ) then
  if ( -x "$BASH" ) then
    exec "$BASH"
  endif
endif

0

সোলারিস:

usermod -s /bin/bash root

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