.Bashrc, .profile, .bash_profile, ආදිය අතර තේරීම [අනුපිටපත]


214

මෙම අපහසුතාවයට පත් වේ, නමුත් පූර්ණ කාලීන POSIX පද්ධති භාවිතා කරමින් වසර ගණනාවක් පසු, ෂෙල් පාරිභෝගිකයාගේ දී යා යුතු නම් මම තවමත් අසීරු අවබොධ කර .bashrc, .profileහෝ වෙන කොහේ හරි. වැනි OS- විශේෂිත වින්‍යාස ගොනු ගැන සඳහන් නොකරමු .pam_environment.

ඔව්, මම දන්නවා ප්‍රලේඛනය හරහා ප්‍රහේලිකාව සකසා එක් එක් ගොනුව පටවා ඇති විට හෝ පටවා නොමැති විට ඉගෙන ගන්න. මා කල්පනා කරන්නේ, ලබා දී ඇති ආකාරයේ අභිරුචිකරණයක් දැමිය යුත්තේ කුමන ගොනුවද යන්න තීරණය කරන්නේ කෙසේද යන්න පිළිබඳව සෑම කෙනෙකුම සවිස්තරාත්මක මාර්ගෝපදේශ සකස් කර තිබේද යන්නයි.


6
මෙම ප්‍රශ්නය අනුපිටපතක් ලෙස සලකුණු නොකළ යුතුය. හේතුව එකතු කළ ප්‍රශ්නයේ පැතිකඩ නොමැත.
ප්‍රේම්රාජ්

හොඳින් සලකලා: serverfault.com/q/261802/270464
Premraj

Answers:


241

ටීඑල්; ඩීආර්:

  • ~/.bash_profileසුපිරි සරල හා හුදෙක් පැටවිය යුතු .profileඅතර .bashrc(එම අනුපිළිවෙල අනුව)

  • ~/.profileපරිසර විචල්‍යයන් ( PATHසහ මිතුරන්) වැනි බාෂ් සමඟ විශේෂයෙන් සම්බන්ධ නොවන දේවල් තිබේ

  • ~/.bashrcඅන්තර්ක්‍රියාකාරී විධාන රේඛාවක ඔබට අවශ්‍ය ඕනෑම දෙයක් තිබේ. EDITORමගේ භාවිතය සඳහා විධාන විමසුම, විචල්ය, බාෂ් අන්වර්ථ නාම

තවත් සටහන් කිහිපයක්:

  • චිත්රක යෙදුම් සඳහා ලබා ගත හැකි ඕනෑම දෙයක් හෝ sh (හෝ as as bash ලෙස ආයාචනා කළ shයුතුය) තිබිය යුතුය~/.profile

  • ~/.bashrc කිසිවක් ප්‍රතිදානය නොකළ යුතුය

  • පිවිසුම් කවච සඳහා පමණක් ලබා ගත හැකි ඕනෑම දෙයක් ඇතුළට යා යුතුය ~/.profile

  • ~/.bash_loginනොපවතින බවට සහතික වන්න .


3
+1, මෙය ~/.profileපැහැදිලිවම ක්‍රියාත්මක වන / bin / sh වැනි GDM / LightDM / LXDM වැනි සේවාවන් සඳහා පරිසරය නිවැරදිව සැකසීමට ඉඩ දෙයි .
user1686

13
මගේ .bashrcප්‍රතිදානයන් බොහෝ දේ, ඔබට ඒ ගැන අදහස් දැක්විය හැකිද? විශේෂයෙන්, මම සුබ පැතුම් ප්‍රතිදානය තැබිය යුත්තේ කොතැනින්ද?
කැලිමෝ

15
Al කැලිමෝ: එය අන්තර්ක්‍රියාකාරී ප්‍රකාරයේදී ප්‍රතිදාන දේවල් පමණක් බවට පත් කරන්න. ඔබට එය භාවිතා කර පරීක්ෂා කළ හැකිය [[ $- == *i* ]], එනම් විශේෂ $-විචල්‍යය තුළ 'i' සොයමින් . ඇත්ත වශයෙන්ම, එය වැදගත් වන්නේ .bashrcඅන්තර්ක්‍රියාකාරී නොවන ආකාරයෙන් කියවීම සඳහා බාෂ් සම්පාදනය කරන ලද පද්ධතිවල පළමු ස්ථානයේ පමණි . (එනම්, ඩේබියන් නමුත් ආරුක්කුව නොවේ.) නමුත් එය භාවිතා කිරීමට sftpහෝ ඒ scpහා සමාන මෙවලම් සම්බන්ධ කිරීමට උත්සාහ කිරීමේදී අද්භූත දෝෂ පණිවිඩ වලට නිරන්තරයෙන් හේතුවකි .
user1686

4
දැන් මට දැනගත යුතුයි- ඇයි .bash_login නොපවතින්නේ? එය කරන්නේ කුමක්ද?
tedder42

11
@ tedder42: එය සමාන කරන්නේ .bash_profileහා .profile. නමුත් බාෂ් කියවන්නේ පළමු එක තුනෙන් එකක් පමණි. තේරුම, ඔබ සතුව ඇත්නම් .bash_login, දෙකම .profileසහ .bash_profileඅභිරහස් ලෙස නොසලකා හරිනු ඇත.
user1686

56

පසුගිය අවුරුදු කිහිපය තුළ, මට නාස්ති කිරීමට බොහෝ කාලයක් තිබුණි, එබැවින් මම මෙය විනාඩි 10 කට වඩා ටිකක් වැඩි කාලයක් පර්යේෂණ කර ඇත්තෙමි . මෙය හොඳම පිරිසැලසුම දැයි මට අදහසක් නැත, එය සෑම අවස්ථාවකම නිවැරදිව වැඩ කිරීමට සිදුවන එකක් පමණි.

අවශ්‍යතා:

  • ~/.profile ඕනෑම / බින් / ෂා සමඟ අනුකූල විය යුතුය - මෙයට බාෂ්, ඩෑෂ්, කේඑස්, ඩිස්ට්‍රෝ භාවිතා කිරීමට තෝරා ගත හැකි ඕනෑම දෙයක් ඇතුළත් වේ.

  • පාරිසරික විචල්‍යයන් කොන්සෝල පිවිසුම් (එනම් 'පිවිසුම් කවචය) සහ චිත්‍රක පිවිසුම් (එනම් GDM, LightDM, හෝ LXDM වැනි දර්ශන කළමනාකරුවන්) විසින් කියවිය හැකි ගොනුවක තැබිය යුතුය.

  • සහිත ඉතා කුඩා කරුණක් තිබේ දෙකම ~/.profile හා ~/.bash_profile. දෙවැන්න අස්ථානගත වී ඇත්නම්, බාෂ් සතුටින් කලින් භාවිතා කරනු ඇති අතර, ඕනෑම බෑෂ් විශේෂිත රේඛා චෙක්පතක් සමඟ $BASHහෝ ආරක්ෂා කළ හැකිය $BASH_VERSION.

  • අතර වෙන්කිරීම *profileහා *rc'පිවිසුම්' ෂෙල් වෙඩි, දෙවැන්න සඳහා ඔබ පර්යන්තය කවුළුව විවෘත වන සෑම අවස්ථාවකදීම හිටපු යොදා ගැනේ. කෙසේ වෙතත්, 'පිවිසුම්' මාදිලියේ bash ප්‍රභවයක් නොවේ ~/.bashrc, එබැවින් ~/.profileඑය අතින් කළ යුතුය.

මෙම සරල වින්යාස වනු ඇත:

  • එය ඇති ~/.profileසියලු පරිසරය විචල්යයන් (bash-විශේෂිත අය හැර) වෙනස් වන්නේ, සමහර විට රේඛාවක් හෝ දෙකක්, පසුව ආරංචි මාර්ග මුද්රණය කරයි ~/.bashrcbash විසින් පවත්වාගෙන නම්, වෙනත් ආකාරයකින් sh-අනුකූල කාරක රීති දැඩිව බැඳී සිටින.

    අපනයනය TZ = "යුරෝපය / පැරිස්"
    අපනයනය EDITOR = "vim"
    if ["AS BASH"]; එවිට
        . ~ / .bashrc
    fi
    අතිකාල
    
  • ඇති ~/.bashrcක චෙක්පතක් සහිත දුම්රිය ඕනෑම ෂෙල්-විශේෂිත පිහිටුවීම්, සිදු කරන අනොන්ය ආකාරයෙන් වැනි දේවල් බිඳ වළක්වා ගැනීමට sftp, ඩේබියන් (bash පැටවීම සඳහා විකල්පය සමඟ සම්පාදනය ස්ථානය මත ~/.bashrcපවා ඒකාකාරී ෂෙල් වෙඩි සඳහා):

    [[$ - == * i *]] || ආපසු 0
    
    PS1 = '\ h \ w \ $'
    
    ආරම්භය () {sudo service "$ 1" ආරම්භය; }
    

කෙසේ වෙතත්, සමහර අන්තර්ක්‍රියාකාරී නොවන විධානයන් (උදා ssh <host> ls) මඟ හැරීමේ ගැටලුවක් ද ඇත ~/.profile, නමුත් පරිසර විචල්‍යයන් ඒවාට ඉතා ප්‍රයෝජනවත් වනු ඇත.

  • සමහර බෙදාහැරීම් (උදා: ඩේබියන්) ~/.bashrcඑවැනි අන්තර්ක්‍රියාකාරී නොවන පිවිසුම් සඳහා ප්‍රභවය ලබා ගැනීමේ විකල්පය සමඟ ඔවුන්ගේ බෑෂ් සම්පාදනය කරයි. මෙම අවස්ථාවේ දී, සියලු පරිසර විචල්‍යයන් ( export ...රේඛා) වෙනම ගොනුවකට ගෙනයාම ~/.environසහ එය දෙකින්ම මූලාශ්‍ර කිරීම .profileසහ .bashrcදෙවරක් සිදු නොකිරීමට මුරකරුවෙකු සමඟ ප්‍රයෝජනවත් බව මට පෙනී ගියේය:

    නම් ! ["RE PREFIX"]; පසුව    # හෝ $ කර්තෘ, හෝ $ tz, නැත්නම් ... 
        . en / .en Environment            # සාමාන්‍යයෙන් .එය පරිසරය විසින්ම සකසන ඕනෑම විචල්‍යයකි
    fi
    
  • අවාසනාවකට මෙන්, වෙනත් බෙදාහැරීම් සඳහා (උදා: ආරුක්කු), මම ඉතා හොඳ විසඳුමක් සොයාගෙන නැත. එක් හැකියාවක් නම් (පෙරනිමියෙන් සක්‍රීය) pam_env PAM මොඩියුලය භාවිතා කිරීම, පහත සඳහන් දෑ ඇතුළත් කිරීමෙන් ~/.pam_environment:

    BASH_ENV =. /. පරිසරය # යතුරු ලියනය         නොවේ; එය මාර්ගයක් විය යුතුය, නමුත් ~ ක්‍රියා නොකරනු ඇත
    

    එවිට, ඇත්ත වශයෙන්ම, යාවත්කාලීන ~/.environකිරීම unset BASH_ENV.


නිගමනය? ෂෙල් වෙඩි වේදනාවකි. පරිසර විචල්යයන් යනු වේදනාවකි. බෙදා හැරීම-විශේෂිත සම්පාදක-කාල විකල්පයන් යනු බූරුවාගේ දැවැන්ත වේදනාවකි.


2
පසුගිය ඡේදය සඳහා +1, නමුත් මම මාර්ග අපගත කැමති .profileහා .bashrcසිට .bash_profileහා රඳවා .profileපිරිසිදු.
nyuszika7h

@ nyuszika7h: මගේ .profile පිරිසිදුයි , ස්තූතියි.
user1686

1
OSX
user151019

1
"දෙකම තිබීම ඉතා අල්ප කාරණයක් ~/.profileසහ ~/.bash_profile": මම එකඟ නොවෙමි. එයට හේතුව ඩෑන් ගේ පිළිතුර බලන්න.
rubenvb

partrubenvb ඔබට අදාළ කොටස උපුටා දැක්විය හැකිද? මම හිතන්නේ ඒවා පමණක් තිබීම .profileසහ bashකොන්දේසි සහිත විශේෂිත කොටස් ආරක්ෂා කිරීම හොඳයි .
කෙල්වින්

37

ශ්‍රීවාට්සාර්ගේ මෙම විශිෂ්ට බ්ලොග් සටහන දෙස බලන්න . මෙන්න උපුටා ගැනීමකි, නමුත් බ්ලොග් සටහන වෙත යන්න, එයට "පිවිසුම් කවචය", ප්‍රවාහ සටහනක් සහ Zsh සඳහා සමාන වගුවක් වැනි වචන සඳහා පැහැදිලි කිරීමක් ඇතුළත් වේ.

Bash සඳහා, ඔවුන් පහත පරිදි ක්රියා කරයි. සුදුසු තීරුව කියවන්න. A, පසුව B, පසුව C යනාදිය ක්‍රියාත්මක කරයි. B1, B2, B3 යන්නෙන් අදහස් කරන්නේ එය ක්‍රියාත්මක වන්නේ එම ලිපිගොනු වලින් පළමුවැන්න පමණි.

+----------------+-----------+-----------+------+
|                |Interactive|Interactive|Script|
|                |login      |non-login  |      |
+----------------+-----------+-----------+------+
|/etc/profile    |   A       |           |      |
+----------------+-----------+-----------+------+
|/etc/bash.bashrc|           |    A      |      |
+----------------+-----------+-----------+------+
|~/.bashrc       |           |    B      |      |
+----------------+-----------+-----------+------+
|~/.bash_profile |   B1      |           |      |
+----------------+-----------+-----------+------+
|~/.bash_login   |   B2      |           |      |
+----------------+-----------+-----------+------+
|~/.profile      |   B3      |           |      |
+----------------+-----------+-----------+------+
|BASH_ENV        |           |           |  A   |
+----------------+-----------+-----------+------+
|                |           |           |      |
+----------------+-----------+-----------+------+
|                |           |           |      |
+----------------+-----------+-----------+------+
|~/.bash_logout  |    C      |           |      |
+----------------+-----------+-----------+------+

මේක හොඳයි. සාමාන්‍යයෙන් /etc/profileඇමතුම් /etc/bash.bashrcසහ ~/.profileඇමතුම් සටහන් කර ගැනීම වැදගත්ය ~.bashrc. ඒ නිසා ඵලදායී, /etc/bash.bashrcසහ ~/.bashrcමෙන්ම අන්තර් ක්රියාකාරී හමුවිය සඳහා ක්රියාත්මක කරනු ලැබේ.
wisbucky

සමහර බෙදාහැරීම් මෙම යෝජනා ක්‍රමය ඉක්මවා යන බවක් පෙනේ (අමුතු ප්‍රතිවිපාක සහිතව) - උදා: විවෘත කිරීම සඳහා මගේ
දෝෂ වාර්තාව

Btw. අවම වශයෙන් bash සමඟ බැෂ් එක කැඳවන විට එම ලිපිගොනු කිසිවක් ක්‍රියාත්මක නොවේ/bin/sh
JepZ

EpJepZ ඔබ හරි, තුන්වන තීරුවේ “ස්ක්‍රිප්ට්” පැහැදිලි කරන්නේ එයයි.
Flimm

1
LiFlimm හොඳයි, ඔබ ස්ක්‍රිප්ට් තීරුවේ විස්තර කරන්නේ ඔබ අන්තර්ක්‍රියාකාරී නොවන ස්ක්‍රිප්ට් එකක් බාෂ් (උදා: බින් / බැෂ්) හරහා ආරම්භ කරන විට කුමක් සිදුවේද යන්නයි . කෙසේ වෙතත්, ඔබ sh හරහා ස්ක්‍රිප්ට් එකක් ආරම්භ කරන්නේ නම් (සහ / bin / sh යනු / bin / bash ට සමාන වේ) ඉහත කිසිවක් ක්‍රියාත්මක නොවේ (පවා නැත BASH_ENV). සෙවීමෙන් බැෂ් මෑන් පිටුවේ අදාළ ඡේදය සොයාගත හැකිය If bash is invoked with the name sh.
JepZ

21

මම ඔබට මගේ “පුළුල්” මාර්ගෝපදේශ ඉදිරිපත් කරමි:

  • කරන්න .bash_profileසහ .profileබර .bashrcඑය පවතියි නම් එය උදා: භාවිතා [ -r $HOME/.bashrc ] && source $HOME/.bashrc
  • අනෙක් සියල්ල දමන්න .bashrc.
  • කරදර වීම නවත්වන්න.
  • සෑම වසර හතරකට වරක්ම, මෙම ප්‍රශ්නය අත්හැරීමට පෙර "කරදර නොවී" යන්නට පෙර විනාඩි දහයක් මෙම ප්‍රශ්නය ගවේෂණය කරන්න.

සංස්කරණය කරන්න: යමෙකු එය විශ්වාස කිරීමට පෙළඹෙන්නේ නම් “විස්තීර්ණ” සඳහා බියජනක උපුටා දැක්වීම් එකතු කරන ලදි. ;)


3
දෙකම තිබීම .bash_profileසහ .profileටිකක් අතිරික්තය; ඔබට අවශ්‍ය වන්නේ දෙවැන්න පමණි. ඔබ එය / bin / sh-proof සෑදිය යුතුය, නමුත් if [ "$BASH" ] && [ -r ~/.bashrc ]; then . ~/.bashrc; fi:, / bin / sh ස්ක්‍රිප්ට් එකකින් ගොනුව අතින් ප්‍රභව කරන වැඩසටහන් (එනම් gdm / lightdm) ඇති බැවින්. මෙයින් අදහස් කරන්නේ තබා ඇති පරිසරය .bashrcඅකාර්යක්ෂම වනු ඇති බවයි. -1 කිරීමට සිදුවිය, මන්දයත් ඔබේ “විස්තීර්ණ” මාර්ගෝපදේශ බොහෝ පද්ධති මත ක්‍රියා නොකරනු ඇත.
user1686

ගැටළුවක් නැත, හුදෙක් කම්මුලට නොගැලපෙන “විස්තීර්ණ” පිළිතුරක් සඳහා මම සතුටින් -1 ක් ගෙවන්නෙමි, ඔබ නිසැකවම එම මාතෘකාව උපයා ඇත.
යාන්ත්‍රික මාළු

1

මම මෙය සොයා ගැනීමට උත්සාහ කිරීම අත්හැර දමා අනෙක් පිටපත්වලින් එක් පිටපතක් ( ~/.shell-setup) සාදන ලදී.

මෙම ප්‍රවේශයට ~/.shell-setupවිශේෂාංග දෙකක් තිබිය යුතුය :

  1. නැවත නැවත උපුටා ගත් විට පවා එක් වරක් පමණක් ධාවනය කරන්න ( ආරක්ෂකයින් ඇතුළත් කරන්න )
  2. අනවශ්‍ය ප්‍රතිදානයක් ජනනය නොකරන්න (ප්‍රතිදානය හරි විට හඳුනා ගන්න)

ෂෙල් ස්ක්‍රිප්ට් වල බොහෝ දේ භාවිතා නොකලද # 1 සෑහෙන්න ප්‍රමිතියකි.

# 2 උපක්‍රමශීලී ය. මෙන්න මම බාෂ් වල භාවිතා කරන දේ:

if [ "" == "$BASH_EXECUTION_STRING" -a "" == "$DESKTOP_SESSION" ]; then
    echo "Hello user!" # ... etc
fi

අවාසනාවට, මම එය ඉදිරිපත් කළේ කෙසේදැයි මට මතක නැත, හෝ අන්තර්ක්‍රියාකාරී කවචයක් හඳුනා ගැනීම ප්‍රමාණවත් නොවන්නේ ඇයි .


-2

සියල්ල දමා .bashrcපසුව මූලාශ්රය .bashrcසිට.profile

Bash man පිටුවෙන් (OS X 10.9 හි):

පිවිසුම් කවචයක් නොවන අන්තර්ක්‍රියාකාරී කවචයක් ආරම්භ කළ විට, එම ගොනුව තිබේ නම්, bas / .bashrc වෙතින් විධාන කියවා ක්‍රියාත්මක කරයි. --Norc විකල්පය භාවිතා කිරීමෙන් මෙය වළක්වා ගත හැකිය. --Rcfile ගොනු විකල්පය bas / .bashrc වෙනුවට ගොනුවෙන් විධාන කියවීමට සහ ක්‍රියාත්මක කිරීමට bash ට බල කරයි.

ඉහත පා text ය වන්නේ සියල්ල ඇතුළත් කර ඇත්තේ මන්ද යන්නයි .bashrc. කෙසේ වෙතත්, ඔබ පිවිසුම් කවචයක් සමඟ කටයුතු කරන විට ටිකක් වෙනස් හැසිරීමක් ඇත. නැවතත්, man පිටුවෙන් උපුටා දැක්වීම:

බාෂ් අන්තර්ක්‍රියාකාරී පිවිසුම් කවචයක් ලෙස හෝ --login විකල්පය සමඟ අන්තර්ක්‍රියාකාරී නොවන කවචයක් ලෙස ආයාචනා කරන විට, එම ගොනුව තිබේ නම් එය මුලින්ම / etc / profile ගොනුවෙන් විධාන කියවා ක්‍රියාත්මක කරයි. එම ගොනුව කියවීමෙන් පසු, එය order / .bash_profile, ~ / .bash_login, සහ ~ / .profile, එම අනුපිළිවෙලෙහි සොයන අතර පවතින සහ කියවිය හැකි පළමු එකෙන් විධාන කියවා ක්‍රියාත්මක කරයි. මෙම හැසිරීම වළක්වා ගැනීම සඳහා කවචය ආරම්භ කළ විට --noprofile විකල්පය භාවිතා කළ හැකිය.

.profileපිවිසුම් කවච සඳහා කියවනු ලැබේ, නමුත් .bashrcඑසේ නොවේ. ඒ සියල්ල අනුපිටපත් .bashrcකිරීම නරක ය ™ එබැවින් .profileහැසිරීම ස්ථාවරව පැවතීම සඳහා අපි එය මූලාශ්‍ර කළ යුතුය .

කෙසේ වෙතත්, ඔබට කොන්දේසි විරහිතව මූලාශ්‍ර .bashrcලබා ගැනීමට අවශ්‍ය නැත .profile. අමතර විස්තර සඳහා කරුණාකර අදහස් සහ වෙනත් පිළිතුරු බලන්න.


4
-1, මූලාශ්‍රය ලබා නොගන්න . @ DanRabinowitz ගේ පිළිතුර බලන්න. .bashrc.profile
nyuszika7h

අවම වශයෙන් කොන්දේසි විරහිතව නොවේ.
nyuszika7h

[ -n "$BASH" -a -f ~/.bashrc ] && . ~/.bashrcසඳහා මිහිරි ඔන්ලයින් යන්ත්‍රයක් වනු .profileඇත.
ජෝන් ඩබ්ලිව්. ස්මිත්

y nyuszika7h, ඇයි නැත්තේ? සෑම කෙනෙකුම එසේ කිරීමට යෝජනා කරන බව පෙනේ .
පැසීරියර්
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.