আমার ~ / .বাশ_প্রফাইলে কাজ করে না কেন?


35

আমি লিনাক্স মিন্ট ব্যবহার করছি। আমার লগইন শেল ( cat /etc/passwd | grep myUserName) বাশ।

আমি আমার গ্রাফিকাল ডেস্কটপ এনভায়রনমেন্টটি শুরু করার পরে এবং এটি থেকে একটি টার্মিনাল এমুলেটর চালানোর পরে, আমি দেখতে পাচ্ছি যে .bash_profileএটি সস করা হয় না (পরিবেশগত সংস্করণগুলি যা এতে exportসম্পাদিত হয় তা আনসেট করা হয় না)। তবে আমি যদি কোনও পাঠ্য কনসোল ( ctrl+ alt+ F1) থেকে লগ ইন করি বা bash -lটার্মিনাল এমুলেটর থেকে ম্যানুয়ালি চালিত করি তবে .bash_profileভাল কাজ করে।

আমি কি ভুল করছি যখন আমি মনে করি যে .bash_profileএক্সটি শুরু হওয়ার পরে এটি উত্সাহিত হওয়া উচিত এবং exportএক্স থেকে চলমান সমস্ত এড ভার্সন টার্মিনালে পাওয়া উচিত?

PS সবকিছুতে রাখা .bashrcএবং এটি থেকে উত্সাহ দেওয়া .bash_profileভাল ধারণা নয় ( https://stackoverflow.com/questions/902946/ ): পরিবেশের জিনিসগুলি কেবল একবারেই উত্সাহিত করা উচিত।

উত্তর:


39

~/.bash_profileলগইন শেল হলে ফাইলটি ব্যাশ দ্বারা পড়া হয়। আপনি যখন পাঠ্য মোডে লগ ইন করবেন তখন এটিই পাবেন।

আপনি যখন এক্স এর অধীনে লগ ইন করেন, তখন সূচনা স্ক্রিপ্টগুলি সম্পাদন করে /bin/sh। উবুন্টু এবং মিন্ট তারিখে /bin/shহয় ড্যাশ , না ব্যাশ। ড্যাশ এবং ব্যাশ উভয়ের একই মূল বৈশিষ্ট্য রয়েছে তবে দ্রুত এবং ছোট হওয়ার জন্য ড্যাশগুলি এই মূল বৈশিষ্ট্যগুলিতে আটকে যায় যেখানে ব্যাশ আরও সংস্থান সংস্থান করার জন্য আরও অনেকগুলি বৈশিষ্ট্য যুক্ত করে। স্ক্রিপ্টগুলির জন্য ড্যাশ ব্যবহার করা সাধারণ যেগুলি ইন্টারেক্টিভ ব্যবহারের জন্য অতিরিক্ত বৈশিষ্ট্য এবং ব্যাশ প্রয়োজন হয় না (যদিও zsh এর অনেক ভাল বৈশিষ্ট্য রয়েছে )।

প্রদর্শন ম্যানেজার অধিকাংশই সমন্বয় (প্রোগ্রাম যেখানে আপনি আপনার ব্যবহারকারী নাম এবং পাসওয়ার্ড টাইপ) এবং ডেস্কটপ পরিবেশে পড়তে ~/.profileএ লগইন স্ক্রিপ্ট থেকে /etc/X11/Xsession, /usr/bin/lightdm-session, /etc/gdm/Xsessionবা যেটা প্রযোজ্য। সুতরাং আপনার পরিবেশ পরিবর্তনশীল সংজ্ঞা রাখুন ~/.profile। ড্যাশ সমর্থন করে এমন সিনট্যাক্স ব্যবহার নিশ্চিত করুন।

সুতরাং আপনি কোথায় রাখা উচিত?

  • শেলটি ইন্টারেক্টিভ হলে একটি ভাল .bash_profileবোঝা .profileএবং লোড .bashrc

    . ~/.profile
    if [[ $- == *i* ]]; then . ~/.bashrc; fi
  • ইন .profile, করা এনভায়রনমেন্ট ভেরিয়েবল সংজ্ঞা, এবং যেমন অন্য কোন সেশনে সেটিংস ulimit

  • ইন .bashrc, এলিয়াস, ফাংশন, সমাপ্তি, কী বাইন্ডিং (যেটি অন্তর্ভুক্ত নয় .inputrc), এর মতো ব্যাশ ইন্টারেক্টিভ সেটিংস রাখুন …

লগইন শেল এবং নন-লগইন শেলের মধ্যে পার্থক্যটি দেখুন ? এবং .bashrc এর বিকল্প


1
একক উত্তর থেকে অনেক কিছুই শিখেছে :)
এমটিকে

16

.bash_profileবাশের স্টার্টআপ কনফিগারেশন স্ক্রিপ্ট। উত্স থেকে কোনও মানক জারি নেই .bash_profile

আপনি যা ভাবছেন তা বরং .profile। মূলত এটি ছিল বোর্ন শেল (sh) এর স্টার্টআপ কনফিগারেশন ফাইল। বর্তমানে অনেক বিতরণে তাদের ডেস্কটপ পরিবেশ উত্স অনুসারে সেট আপ হয়েছে .profile। দ্রষ্টব্য যে এটিও একটি মান নয়, তবে এটি একটি সম্মেলন বলে মনে হচ্ছে।

দেবিয়ান .profileগ্রাফিকাল লগইন ( 2013 হিসাবে উইকি পৃষ্ঠা ) উত্স হিসাবে ব্যবহৃত এখন এখন এটি ( উইকি পৃষ্ঠা 2016 হিসাবে ) না।

.xprofileগ্রাফিকাল লগইন ( 2013 হিসাবে উইকি পৃষ্ঠা ) আর্ক উত্স ।

উবুন্টু .profile( 2013 সালের হিসাবে উইকি পৃষ্ঠা ) ব্যবহার করে নিরুৎসাহিত করতেন এখন এটি আর নিরুৎসাহিত করবে না ( ২০১ of সালের হিসাবে উইকি পৃষ্ঠা )।


আপনার অন্য প্রশ্নটি সম্পর্কে: আমার ~ / .bash_profile কাজ করে না কেন? এটাই প্রত্যাশিত আচরণ।

সংক্ষেপে, আচরণটি নিম্নরূপ:

  • একটি ইন্টারেক্টিভ লগইন শেল হিসাবে বাশ শুরু হয়েছিল: পঠিত ~/.profile
  • একটি ইন্টারেক্টিভ অ-লগইন শেল হিসাবে বাশ শুরু হয়েছিল: পঠিত ~/.bashrc

আরও তথ্যের জন্য আমার অনুরূপ প্রশ্নটির উত্তরটি জিজ্ঞাসাবাবুতে দেখুন: https://askubuntu.com/questions/132276/configure-gnome-terminal-to-start-bash-as-a-login-shell-doesnt-read-bashrc / 132319 # 132319


1
এর কয়েকটি সঠিক, তবে "সর্বদা পড়া ~/.bashrc" খারাপ পরামর্শ: আপনার কেবল .bashrcইন্টারেক্টিভ শেল থেকে পড়া উচিত । আপনি এখানে মূল সমস্যাটি মিস করেছেন যা X এর অধীনে লগ ইন করার সময়, ব্যাশের কোনও লগইন উদাহরণ নেই (বেশিরভাগ ডিসপ্লে ম্যানেজার / ডেস্কটপ এনভায়রনমেন্ট কম্বিনেশনের অধীনে, স্পষ্টতই আন্তোনিওকের)।
গিলস 'অশুভ হওয়া বন্ধ করুন'

আপনার প্রতিক্রিয়ার জন্য ধন্যবাদ। আমি আশা করি আপনার অভিযোগগুলি সমাধান করার জন্য আমি আমার উত্তরটি ভালভাবে আপডেট করেছি। "সর্বদা পড়া .bashrc" সম্পর্কে আমার পরামর্শ সম্পর্কে , আমি সর্বদা ইন্টারেক্টিভ শেলের জন্য বুঝি। আমি সেই অংশটি স্পষ্ট করে দিয়েছি। আমি আশা করি এটি আর ভ্রান্ত নয়।
লেসমানা

2
" উবুন্টু বিশেষত .profile( লিঙ্ক ) ব্যবহার করে নিরুৎসাহিত করে " উইকি একবার (অযৌক্তিকভাবে) নিরুৎসাহিত করে; এটা ঠিক করা হয়েছে। ( /etc/profileস্ক্রিপ্টগুলিতে স্ক্রিপ্ট যুক্ত করার পক্ষে অগ্রাধিকার হিসাবে নোট সিস্টেমওয়াইড অ্যাসাইনমেন্টের জন্য নিরুৎসাহিত থেকে যায় না /etc/profile.d) প্রতি ব্যবহারকারী .profileব্যবহারকারী পরিবেশের ভেরিয়েবল সেট করার একটি প্রস্তাবিত উপায় হিসাবে এখন উপস্থাপন করা হয়েছে: "পরিবেশের পরিবর্তনশীল সেটিংসের জন্য উপযুক্ত ফাইলগুলি যা কেবলমাত্র একটিকে প্রভাবিত করবে নির্দিষ্ট ব্যবহারকারী (সামগ্রিকভাবে সিস্টেমের পরিবর্তে) হলেন ~ / .pam_en वातावरण এবং ~ / । প্রোফাইলে ""
এলিয়াহ কাগান 4:34

দেবিয়ান সম্পর্কিত লিঙ্কযুক্ত পৃষ্ঠাটি নির্দিষ্ট করে যে দেবিয়ান গ্রাফিকাল লগইনের জন্য পড়েন না~/.profile এবং ~/.xsessionrcপরিবর্তে ব্যবহার করা উচিত।
করোরা

লক্ষ্য করার জন্য ধন্যবাদ উইকি পাতা আপডেট হয়েছে। আমি উত্তরগুলির সাথে সংস্করণগুলির সাথে লিঙ্ক করেছি।
লেসমানা

2

আপনার প্রশ্নে, আপনি যখন https://stackoverflow.com/questions/902946/ উত্স না করার পরামর্শ দিচ্ছেন, যখন গৃহীত উত্তরগুলি নির্দেশ করে

  • আমার PATH সেটআপটিকে একটি প্রফাইলে ফাইলে রাখুন (কারণ আমি মাঝে মধ্যে অন্যান্য শেল ব্যবহার করি)
  • আমার .Bashrc ফাইলটিতে আমার বাশনের উপাধি এবং ফাংশনগুলি রাখুন
  • তারপরে এটি ব্যবহার করুন [সম্পাদিত: স্নিপ কোড-মন্তব্য]:

    .bash_profile:

    #!/bin/bash
    # echo "Loading ${HOME}/.bash_profile"
    source ~/.profile # Get the paths
    source ~/.bashrc  # get aliases

.profileলিনাক্স মিন্টে এগুলি সব করা আমার পক্ষে কাজ করে না। .bashrcজরিমানা কাজ করে ।


2

/ উত্স। /। প্রোফাইল ফাইলটি পুনরায় লোড করার চেষ্টা করার সময় বেশ কয়েকটি সমস্যা দেখা দেয়। [এটি উবুন্টু লিনাক্সকে বোঝায় - কিছু ক্ষেত্রে আদেশের বিবরণ পৃথক হবে]

  1. আপনি কি এটি সরাসরি টার্মিনালে বা কোনও স্ক্রিপ্টে চালাচ্ছেন?
  2. কীভাবে আপনি এটি কোনও স্ক্রিপ্টে চালাবেন?

বিজ্ঞাপন. 1)

এটি সরাসরি টার্মিনালে চালানোর অর্থ এখানে কোনও সাব-শেল তৈরি হবে না। সুতরাং আপনি দুটি কমান্ড ব্যবহার করতে পারেন:

source ~/.bash_profile

অথবা

. ~/.bash_profile

উভয় ক্ষেত্রেই এটি। প্রোফাইল ফাইলের সামগ্রীর সাথে পরিবেশ আপডেট করবে update

বিজ্ঞাপন 2) আপনি কল করে যে কোনও বাশ স্ক্রিপ্ট শুরু করতে পারেন

sh myscript.sh 

অথবা

. myscript.sh

প্রথম ক্ষেত্রে এটি একটি সাবশেল তৈরি করবে যা আপনার সিস্টেমের পরিবেশের ভেরিয়েবলগুলিকে প্রভাবিত করবে না এবং তারা কেবল সাব-শেল প্রক্রিয়াতেই দৃশ্যমান হবে। সাবশেল কমান্ড শেষ করে রফতানির কোনোটাই প্রয়োগ করা হবে না। এটি একটি প্রচলিত ত্রুটি এবং অনেক সময় হ্রাস করার জন্য অনেক বিকাশকারীকে ঘটায়।

আপনার স্ক্রিপ্টে আপনার পরিবর্তনগুলি প্রয়োগ করার জন্য বিশ্ব পরিবেশের জন্য প্রভাব ফেলতে স্ক্রিপ্টটি চালাতে হবে

.myscript.sh

কমান্ড।

আপনার স্ক্রিপ্টটি সাবসেলে চালিত হচ্ছে না তা নিশ্চিত করার জন্য আপনি এই ফাংশনটি ব্যবহার করতে পারেন। (আবার উদাহরণ উবুন্টু শেলের জন্য)

#/bin/bash

preventSubshell(){
  if [[ $_ != $0 ]]
  then
    echo "Script is being sourced"
  else
    echo "Script is a subshell - please run the script by invoking . script.sh command";
    exit 1;
  fi
}

আমি আশা করি এটি কিছু সাধারণ ভুল বোঝাবুঝি পরিষ্কার করে দেয়! : ডি গুড লাক!


0

সহজ সমাধানটি হল টার্মিনালটিকে লগইন টার্মিনাল করা। ডিফল্ট প্রোফাইলের 'টাইল এবং কমান্ড' এর অধীনে জ্নোম টার্মিনালের জন্য আপনি "লগইন শেল হিসাবে কমান্ড চালান" বক্সটি পরীক্ষা করতে পারেন। এই নিবন্ধটি লগইন শেল এবং এটির মধ্যে পার্থক্য ব্যাখ্যা করে explains

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