রুট অ্যাক্সেস ছাড়াই zsh ডিফল্ট শেল তৈরি করা


52

আমি আমার স্কুলের কম্পিউটার ব্যবহার করছি এবং এর zshপরিবর্তে ব্যবহার করতে চাই bash। আমি এটিকে ডিফল্ট শেল করতে চাই, তবে আমি কোনও কমান্ড চালাতে $ chsh -s $(which zsh)পারি না কারণ অ্যাডমিনের অধিকার নেই।

আমার .bashrcবা এমন কিছুর মধ্যে এমন কিছু রাখার উপায় আছে যা স্বয়ংক্রিয়ভাবে কল হয়ে যায় zshযখন এটি কর্মক্ষেত্র হিসাবে খোলে?

স্পষ্ট করার জন্য, zshইতিমধ্যে ইনস্টল করা আছে।


2
হ্যাঁ, কেবল ফাইলটিতে যুক্ত zshকরুন .bashrc। লগআউট এবং লগইন এবং সম্পন্ন!
ফেডোরকুই

এর জন্যে দুঃখিত. কিন্তু প্রশ্নটি শেষ করতে, আমি কেবল zshপ্রথম লাইনে রেখেছি ?

3
.Bashrc এ zsh স্থাপন করা সর্বদা bashস্পষ্টভাবে বলা হলেও এটি কার্যকর করাতে পারে । এর .bash_profileপরিবর্তে এটি আরও ভাল রাখুন ।
কনসোলবক্স

টার্মিনাল পছন্দগুলিতে আপনি zsh কে আপনার ডিফল্ট শেল হিসাবে সেট করতে পারেন (একটি নতুন প্রোফাইল তৈরি করুন)।
lmaooooo

উত্তর:


68

.bash_profileআপনার হোম ডিরেক্টরিতে তৈরি করুন এবং এই লাইনগুলি যুক্ত করুন:

export SHELL=/bin/zsh
exec /bin/zsh -l

আপডেট: .profileযখন ডিফল্ট শেল বাশ হয় না তখন সাধারণ সমাধান হিসাবে কাজ করতে পারে। আমি নিশ্চিত নই .profileযে জেডএসের পাশাপাশি ফোন করা হয়েছিল কিনা তা যে এটি নিরর্থক হতে পারে তবে আমরা সাধারণ চেক দিয়ে নিরাপদে এটি করতে পারি:

export SHELL=/bin/zsh
[ -z "$ZSH_VERSION" ] && exec /bin/zsh -l

আমরা whichগতিশীল পথ পেতে এর ব্যবহার করতে পারি zshযার মূল্যের উপর নির্ভর করে $PATH:

export SHELL=`which zsh`
[ -z "$ZSH_VERSION" ] && exec "$SHELL" -l

যদি কোনও লিনাক্স অ্যাডমিন (রুট) আপনার ডিফল্ট শেলটিকে বাশ (তবে zsh নয়) ব্যতীত অন্য কোনও কিছুতে পরিবর্তন করে, উদাহরণস্বরূপ ksh? তাহলে .bash_profileরেফারেন্স পাবেন না। এর .profileপরিবর্তে এটি কীভাবে রাখবেন ?
জোশুয়া হুবার

@ জোশুয়া হুবার আমি শেষ পরীক্ষা করেছি, .profileকাজ হয়নি। এছাড়াও .profileবলা হবে না Zsh? এটি অপ্রয়োজনীয় যেতে পারে। যদিও এখনও এটি পরীক্ষা করে নি। (আপডেট: এটি এখন কার্যকর হয়েছে, আমি আগে কোন ভুল করেছি তা নিশ্চিত নয়)) ব্যবহারে সম্ভাব্য ত্রুটিগুলি সম্পর্কে কোনও ধারণা .profile?
কনসোলবক্স

1
@ কনসোলবাক্স বাশ কেবলমাত্র .profileযদি .bash_profileবিদ্যমান না থাকে তবে (যদি না আপনি নিজেই এটির উত্স না করেন .bash_profile) source বিশেষ করে, ব্যাশ সূত্র ফাইলের প্রথম এক [ .bash_profile> .bash_login> .profile] এটি খুঁজে বের করে। এটি কেবল .profileপসিক্স (বোর্ন শেল) সামঞ্জস্য বৈশিষ্ট্য হিসাবে দেখায় ।
পাইরেলি

নিবন্ধন করুন ঠিক যেমন ম্যানুয়ালটিতে বলা হয়েছে: "সেই ফাইলটি পড়ার পরে, এটি সেই ক্রমে b / .bash_profile, b / .Bash_login, এবং ile /। প্রোফাইলে অনুসন্ধান করে এবং উপস্থিত এবং পড়ার যোগ্য প্রথমটি থেকে আদেশগুলি পড়ে এবং কার্যকর করে । "
কনসোলবক্স

এটি আমার শেল পরিবর্তিত হয়ে রান কাস্টম কমান্ড দিয়ে একটি নতুন টার্মিনাল প্রোফাইল স্থাপনের জন্য কাজ করেছে zsh.bash_profileএবং .profileকাজ করেনি (ফাইলগুলি কার্যকর করা হয়নি, বিশ্ববিদ্যালয়ের কম্পিউটারে ফেডোরা 26)।
lmaooooo

12

সাধারণত আপনি chshনন-রুট ব্যবহারকারী হিসাবে ব্যবহার করতে পারেন । তবে এটি মাঝেমধ্যে অক্ষম করা হয়, সাধারণত এমন সাইটগুলিতে যেগুলি এনআইএস এবং এলডিএপি জাতীয় নেটওয়ার্ক ডাটাবেসের কিছু ফর্ম ব্যবহার করে। পরিবর্তে একটি ypchsh(এনআইএস) বা chsh.ldap(এলডিএপি) থাকতে পারে ।

chshসাধারণত শুধুমাত্র কিছু অনুমতি দেবে অনুমোদিত শাঁস, সাধারণত তালিকাভুক্ত বেশী /etc/shells

আপনি যদি chshনিজের সাইটে বা এর রূপগুলি ব্যবহার করতে না পারেন , তবে আপনার লগইন শেলটি execআপনার পছন্দের শেলটিতে সাজিয়ে রাখুন এবং আপনার পছন্দসই শেলটিতে SHELLভেরিয়েবলটি সেট করুন ।

  • যদি আপনার লগ-ইন শেল হল sh, dashবা ksh: ফাইল আপনার সম্পাদনা করার দরকার হয় ~/.profile। এই ফাইলটি একটি ইন্টারেক্টিভ সেশনের শুরুতে এবং কিছু অ-ইন্টারেক্টিভ সেশন প্রারম্ভিক স্ক্রিপ্টগুলি (যেমন এক্স 11 সেশনের জন্য) দ্বারা পড়েছে তা সতর্ক থাকুন, আপনার যত্ন নেওয়া দরকার: কেবলমাত্র কল করুন exec(বর্তমান প্রক্রিয়াটির পরিবর্তে) বর্তমান যখন শেল ইন্টারেক্টিভ হয়। বোর্ন শেল ( /bin/shসোলারিস 10 এবং এর আগে) বাদে আপনি বলতে পারেন যে শেলটি iবিকল্প তালিকার উপস্থিতিতে ( $-) উপস্থিতি দ্বারা ইন্টারেক্টিভ হয় ।

    preferred_shell=
    if [ -x /bin/zsh ]; then
      preferred_shell=/bin/zsh
    fi
    
    if [ -n "$preferred_shell" ]; then
      case $- in
        *i*) SHELL=$preferred_shell; export SHELL; exec "$preferred_shell";;
      esac
    fi

    আপনি যদি zsh আপনার পড়তে চান .zprofileতবে -lবিকল্পটি পাস করুন ।

  • যদি আপনার লগইন শেল হয় তবে bashআপনি উপরের মতো এগিয়ে যেতে পারেন। বিকল্পভাবে, আপনি এই আদেশগুলি ভিতরে রাখতে পারেন ~/.bash_profile। বেশিরভাগ সেশন প্রারম্ভিক স্ক্রিপ্টগুলি কেবলমাত্র পড়ে ~/.profileএবং না ~/.bash_profile, তবে আমি এমন কিছু দেখেছি যা ব্যাশ এবং পড়ার অধীনে চলে .bash_profileso সুতরাং সেখানেও আপনাকে execঅ-ইন্টারেক্টিভ শেলটিতে কল না দেওয়ার বিষয়ে সতর্কতা অবলম্বন করা উচিত ।

  • আপনার লগইন শেলটি যদি csh বা tcsh হয় তবে chsh বা প্রশাসক গোপনীয়তা ছাড়াই ডিফল্ট শেল পরিবর্তন করার একটি উদাহরণ দেখুন


1

আমি বিশ্বাস করি যে আদেশটি chshএই একই উদ্দেশ্যে। যদিও, আমি নিশ্চিত নই যে প্রতিটি লিনাক্স / ইউনিক্স ডিস্ট্রো সমর্থন করে। ম্যান পেজটি দেখুন chsh


কিছু সিস্টেমে এটিও রয়েছে passwd -s
স্টাফেন চেজেলাস

1

আপনার যদি chshপ্রশাসনিক অধিকার না থাকার কারণে আপনি দৌড়াতে না পারেন তবে কারও সাথে কথা বলুন

সম্ভবত আপনি chshনন-রুট হিসাবে ব্যবহার করতে পারবেন না কারণ আপনি যে সিস্টেমটি ব্যবহার করছেন সেটি কনফিগার করা হয়েছে যাতে এটি chshকাজ করে না, উদাহরণস্বরূপ কারণ সিস্টেমটি কেবল /etc/passwdফাইলের পরিবর্তে এনআইএস বা এলডিএপি ব্যবহার করে । অথবা সম্ভবত আপনার সিস্টেমের প্রশাসক কেবল কিছু নিয়ন্ত্রণ বজায় রাখতে চান।

আপনার শেল পরিবর্তন করার পদ্ধতিটি আপনার সংস্থার নীতিগুলির উপর নির্ভর করে। একটি স্থানীয় কমান্ড থাকতে পারে যা chshসাধারণত যা করে তা করে। অথবা শেল পরিবর্তনের জন্য আপনাকে একটি সমর্থন টিকিট জমা দিতে হবে।

অন্যান্য উত্তরগুলির বেশিরভাগই ভাল, তবে আপনার প্রশাসকরা যদি যথাযথভাবে প্রতিক্রিয়াশীল হন তবে আপনি আপনার প্রারম্ভিক স্ক্রিপ্টগুলি হ্যাক করা বিরক্ত করতে চাইবেন না। zsh -lপ্রশাসক আমার অ্যাকাউন্ট আপডেট করার আগ পর্যন্ত লগ ইন করার পরে আমি সম্ভবত ম্যানুয়ালি প্রার্থনা করব।

আরেকটি বিষয় মনে রাখবেন: কখনও কখনও বিভিন্ন শেল একই স্টার্টআপ ফাইলগুলি ব্যবহার করতে পারে। উদাহরণস্বরূপ, shএবং bashউভয় নির্বাহ করতে পারেন $HOME/.profile, এবং cshএবং tcshউভয় নির্বাহ করতে পারেন $HOME/.loginএবং $HOME/.cshrc(যদিও মত শেল-নির্দিষ্ট প্রারম্ভকালে ফাইল .bashrc, .bash_profileএবং .tcshrcসেই পাল্টাতে পারেন)। যদি আপনার ডিফল্ট শেলটি থাকে /bin/cshএবং আপনি ব্যবহার করতে চান, তবে আপনাকে /bin/tcshঅনুরোধ .loginকরতে আপডেট করা /bin/tcsh -lঅসীম লুপ তৈরি করতে পারে। স্পেসিফিক স্টার্টআপ ফাইলগুলি zshকার্যকর করতে ঘটে না bashতাই এটি আপনার পক্ষে কোনও সমস্যা নয়।

সর্বাধিক শাঁস ভেরিয়েবল যে চিহ্নিত যা শেল আপনি (চালাচ্ছেন সেট $BASH_VERSION, $tcsh, $ZSH_VERSION)। আপনি যদি আপনার পছন্দের শেলটি শুরু করার জন্য স্টার্টআপ কোডটি লিখতে চলেছেন তবে এটিকে বন্ধ করে দেওয়া কোনও খারাপ ধারণা নয় ifসুতরাং যদি আপনি ইতিমধ্যে সেই শেলটি চালাচ্ছেন না তবে এটি কার্যকর করা হয়। কনসোলবক্সের উত্তর থেকে কোডটি ব্যবহার করা :

if [ "${ZSH_VERSION:-unset}" = "unset" ] ; then
    export SHELL=/bin/zsh
    exec /bin/zsh -l
fi

(চেকিংয়ের "${ZSH_VERSION:-unset}"পরিবর্তে যুক্ত হওয়া জটিলতার ফলে "$ZSH_VERSION"আপনি যে সম্ভাবনাটি করেছেন তা কেবলমাত্র এটির অনুমতি দেয় set -o unset, এমন একটি বিকল্প যা একটি অপছন্দিত ভেরিয়েবলের রেফারেন্সকে ত্রুটি হিসাবে চিহ্নিত করে))


1

আমি কয়েকটি পরিস্থিতিতে ভাবতে পারি।

  1. zshনেই /etc/shellsএবং ওপি zshকমান্ড প্রম্পটে টাইপ না করে এটি ব্যবহার করতে চায় । সম্ভাব্য সমাধান.

    ক) এটি ব্যবহারের জন্য প্রোফাইল কৌশলগুলি লগইনে ব্যবহার করুন। এটি বাস্তবে শেল পরিবর্তন করার মতোই কার্যকর।

    খ) যোগ করার জন্য অ্যাডমিন প্রার্থনা করা zshথেকে /etc/shellsযাতে আপনি করতে পারেন chshএটি

    গ) প্রশাসককে আপনার শেল পরিবর্তন করতে অনুরোধ করুন। এটি বুদ্ধিমানের কাজ নয়, কারণ এটি আপনার সক্ষমতা হারাবে you আপনি যদি ftpকেবল ftpশেল প্রবেশ করেন তবেই আপনি এটি ব্যবহার করতে পারবেন/etc/shells

  2. ব্যবহারকারী একটি সীমাবদ্ধ শেল থেকে পালাতে চান, সম্ভবত rbashবা rsh

    যদি .profileসম্পাদনযোগ্য হয় তবে এটি সম্পাদনা করে PATHপ্রসারিত করা যেতে পারে। একবার /binপথে চলার পরে আপনি শেল পরিবর্তন করতে দেওয়ার আদেশটি অ্যাক্সেস পেয়ে bashভিতরে থেকে শুরু করতে পারেন । অনেক কমান্ডের শেল এস্কেপ থাকে যা একটি সীমাবদ্ধ শেল থেকে বাঁচতে এবং পুনরায় অ্যাক্সেস পেতে ব্যবহৃত হতে পারে ।rsh/rbashchshchsh

  3. chshঅন্য কোনও কারণে সত্যই কাজ করে না। সম্ভাবনা থেকে সমাধান 1 এর উত্তরও এখানে।

পরিস্থিতি 2 আসলে ডিফল্ট শেলটি পরিবর্তন করার একমাত্র কারণ (এটি খুব সীমাবদ্ধ)।


-3

আমি মনে করি না যে সরবরাহ করা উত্তরটি আসলে zshডিফল্ট শেল করে। ব্যবহারকারী তার / তার ডিফল্ট শেলটিতে লগ ইন করার সাথে সাথে এটি শেলটিকে zsh এ পরিবর্তন করে । ব্যবহারকারী এখনও এতে লগইন করবে DEFAULT SHELLতবে এটির সাথে শেলটি পরিবর্তিত হবেzsh

ডিফল্ট শেল ব্যবহার করতে:

usermod -s /path/to/shell username 

এটি করতে আপনার রুট হওয়া উচিত।

অন্যথায় উপরের কাজটি কাজে আসবে।

মন্তব্য থেকে যুক্ত করা হয়েছে

chsh -s /path/to/zsh  # considered as standard as compared to usermod

এবং এটি তার নিজের দ্বারা ব্যবহারকারীদের দ্বারা আহবান করা যেতে পারে।


4
প্রশ্নটি বেশ স্পষ্টভাবে জানিয়েছে যে সিস্টেমের ব্যবহারকারী ডাটাবেসটি পরিবর্তন করা (এই উত্তরটি করার জন্য আপনাকে যে বিটটি করতে হবে সেটি) কোনও বিকল্প নয়।
কালেব

3
chsh -s /path/to/zshআরও মানসম্পন্ন এবং সাধারণত (তবে সর্বদা নয়) এর জন্য রুট অ্যাক্সেসের প্রয়োজন হয় না, usermodযা সর্বদা করে। প্রশ্নটি ইতিমধ্যে কাজ না করে যা বলেছে তার চেয়ে আপনার উত্তরটিতে আরও সমস্যা রয়েছে।
গিলস 'তাই খারাপ হওয়া বন্ধ করুন'
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.