আমি দুটি ভিন্ন সিস্টেমে একটি নতুন ওনারিক ইনস্টল (অর্থাত্ আপগ্রেড নয়) চালাচ্ছি এবং আপাতদৃষ্টিতে সম্পর্কিত সমস্যার একই সেটটিতে চলেছি।
গুচ্ছটির সবচেয়ে হতাশা হ'ল, যখন আমি ম্যাক ওএস এক্স থেকে আমার সাথে চালিত। প্রোফাইল এবং .বাশার্কটি ব্যবহার করি তখন লাইটডিএম এর মাধ্যমে এক্সে লগ ইন করে সাথে সাথে আমাকে লগ আউট করে। আমি বিশ্বাস করি এটি এই কারণে ঘটেছিল যে "/ bin / sh" চালানোর সময় এটি / বিন / ড্যাশ হিসাবে আচরণ করে তবে এখনও / শেল ভেরিয়েবলটি / বিন / ব্যাশে সেট থাকে।
বহির্পাতন
আমার একটা বিশাল আছে .bashrc
। আপনি এটি দেখতে চাইলে এখানে এটি দেখতে পারেন, তবে এটির বিষয়বস্তু সম্ভবত প্রাসঙ্গিক নয়, এটি ব্যাসিজমে ভরা এবং সত্য যে এটি এক্সটারমের ভিতরে বা ভার্চুয়াল কনসোলটিতে কোনও ত্রুটি নিয়ে কাজ করে না aside
আমার .profile
চেহারাটি এর মতো (সংক্ষেপে):
case $SHELL in
*bash*)
if [ -f $HOME/.bashrc -a -r $HOME/.bashrc ]; then
. $HOME/.bashrc
fi
;;
esac
আমি যদি লাইটডিএম এর মাধ্যমে এক্স-এ লগ ইন করার চেষ্টা করি তবে তা আমাকে সঙ্গে সঙ্গে লগ আউট করে দেবে। .xsession-errors
আমার .bashrc সম্পর্কিত ক্ষেত্রে ত্রুটি পেয়েছি যা দেখতে (সংক্ষেপে বর্ণিত):
/home/mrled/.bashrc: 103: [[: not found
[: 103: Linux: unexpected operator
[: 274: -P :: unexpected operator
/home/mrled/.bashrc: 520: complete: not found
যেমনটি আমি বলেছি, যখন আমি ভার্চুয়াল কনসোল থেকে বাশ চালাই, তখন আমি এই ত্রুটিগুলি পাই না। তদ্ব্যতীত, আমি যদি আমার। প্রোফাইলটি অপসারণ করি তবে আমি এক্স তে লগইন করতে পারি। (আমি ভার্চুয়াল কনসোলে লগ ইনও করতে পারি এবং startx
এক্স সেশন শুরু করতে ব্যবহার করতে পারি যা কাজ করে তবে এটি অবশ্যই দীর্ঘমেয়াদী সমাধান নয়))
যাইহোক, আমি আবিষ্কার করেছি যে যদি আমি চালানোর /bin/sh -l
, আমি কি ত্রুটি পেতে। এখানে একটি উদাহরণ সেশন রয়েছে (দ্রষ্টব্য: ব্যাশ প্রম্পটটি আমি সরল করেছি bash>
এবং sh প্রম্পটটি কেবলমাত্র $
):
bash> echo $SHELL
/bin/bash
bash> echo $BASH_VERSION
4.2.10(1)-release
bash> /bin/sh -l
/home/mrled/.bashrc: 103: [[: not found
[: 103: Linux: unexpected operator
[: 274: -P :: unexpected operator
/home/mrled/.bashrc: 520: complete: not found
$ echo $SHELL
/bin/bash
$ echo $BASH_VERSION
$
প্রশ্ন 1: কেন এমন হচ্ছে?
আমি বুঝতে পারি যে / বিন / শ এখন বাশের পরিবর্তে ড্যাশকে নির্দেশ করে , তবে যদি এটি সত্য হয় তবে $SHELL
এখনও কেন ফিরে আসছেন /bin/bash
?
প্রশ্ন 2: আমি এটিকে ঘিরে কাজ করতে কী করতে পারি?
এখানে কাজ করার একটি উপায় আছে কি? আমি আমার প্রোফাইলটি লোড করে রাখতে চাই .বাশিআরসি যাতে আমি লগইন এবং নন-লগইন উভয় শেলগুলিতে একই পরিবেশ পাই তবে স্পষ্টতই আমি কেবল এটি ব্যাশ নিজেই লোড করতে চাই, / বিন / শ ব্যাস হিসাবে মাস্ক্রেডিং নয়।
আপনি উপরের $ BASH_VERSION ভেরিয়েবলের সামগ্রীতে পার্থক্যটি লক্ষ্য করেছেন noticed আমি আমার। প্রোফাইলটিকে এই জাতীয় কিছুতে মুড়িয়ে দেওয়ার চেষ্টা করেছি:
if [ -n $BASH_VERSION ]; then
# the rest of my .profile as above
fi
-n
পরীক্ষা উপরে সেশনে সত্য ফিরে উচিত শুধুমাত্র যদি স্ট্রিং এর দৈর্ঘ্য নন-জিরো, কিন্তু, যদিও, আমি চলছি অধীনে /bin/sh -l
এটা $ BASH_VERSION জন্য একটি খালি স্ট্রিং, যখন এটা ভালো আমার .profile মধ্যে অন্তর্ভুক্ত ফেরৎ , এটি পরীক্ষায় পাস! এগুলি আমার .bashrc উত্স করতে এগিয়ে যায় এবং আমাকে আগের মতো ত্রুটি দেয়।
এখন আমি সত্যিই বিভ্রান্ত।
$SHELL
/etc/passwd
(বা getent passwd
) এর শেষ ক্ষেত্র যা কিছু তা-ই ।
~/.profile
, বাশ-নির্দিষ্ট জিনিসগুলিতে রাখা উচিত ~/.bashrc
এবং ~/.bash_profile
উভয় উত্স থাকতে পারে ।
dash -l
দেখায় ।$SHELL
/bin/bash