PATH වෙත මාර්ගයක් නිවැරදිව එකතු කරන්නේ කෙසේද?


1001

PATHපරිසර විචල්‍යයට නව මාවතක් එක් කළ යුත්තේ කොතැනදැයි මම කල්පනා කරමි . සංස්කරණය කිරීමෙන් මෙය කළ හැකි බව මම දනිමි .bashrc(උදාහරණයක් ලෙස), නමුත් මෙය කරන්නේ කෙසේද යන්න පැහැදිලි නැත.

මෙම මාර්ගයේ:

export PATH=~/opt/bin:$PATH

නැත්නම් මේ?

export PATH=$PATH:~/opt/bin

printf 'P nPATH = $ PATH: "එකතු කිරීමට මාර්ගය" \ nexport PATH \ n' >> ~ / .bashrc
Microsoft Linux TM


දැනටමත් සමහර මාර්ග එකතු කර ඇත්නම්, උදා PATH=$PATH:$HOME/.local/bin:$HOME/bin: a සමඟ වෙන් කිරීමෙන් තවත් එකක් එකතු කළ හැකිය: උදා PATH=$PATH:$HOME/.local/bin:$HOME/bin:/home/ec2-user/pear/bin.
සන්දීපන් නාත්

2
මෙම පිළිතුරු ලිනක්ස් වල සියලුම රසයන් සඳහා ක්‍රියා කරයිද?
Ungeheuer

Answers:


1127

සරල දේවල්

PATH=$PATH:~/opt/bin

හෝ

PATH=~/opt/bin:$PATH

ඔබට ~/opt/binඅවසානයේ එකතු කිරීමට අවශ්‍යද යන්න මත පදනම්ව (අනෙක් සියලුම නාමාවලි වලට පසුව සෙවීමට, එකම නාමයෙන් බහුවිධ නාමාවලිවල වැඩසටහනක් තිබේ නම්) හෝ ආරම්භයේ දී (අනෙක් සියලුම නාමාවලි වලට පෙර සෙවීමට).

ඔබට එකවර බහුවිධ ඇතුළත් කිරීම් එකතු කළ හැකිය. PATH=$PATH:~/opt/bin:~/opt/node/binහෝ ඇණවුම් කිරීමේ වෙනස්කම් ඉතා හොඳින් සිදු වේ. exportඅමතර සංකූලතා ඇති බැවින් පේළියේ ආරම්භයේ තබන්න එපා (“බැෂ් හැර වෙනත් ෂෙල් වෙඩි පිළිබඳ සටහන්” යටතේ පහත බලන්න).

ඔබ PATHවිවිධ සංරචක වලින් ගොඩනගන්නේ නම් , ඔබට අනුපිටපත් ඇතුළත් විය හැකිය. යුනික්ස් විසින් සොයාගත යුතු නිවාස නාමාවලි මාර්ගය එක් කරන්නේ කෙසේදැයි බලන්න. සහ අනුපිටපත් ඉවත් කිරීම aw PATH ඇතුළත් කිරීම් awk විධානය සමඟ අනුපිටපත් එකතු කිරීමෙන් වළක්වා ගැනීමට හෝ ඉවත් කිරීමට.

සමහර බෙදාහැරීම් ස්වයංක්‍රීයව ~/binඔබගේ PATH හි පවතී නම් එය තිබේ.

එය දැමිය යුතු තැන

වෙනස් කිරීමට රේඛාව දාන්න PATHදී ~/.profile, හෝ ~/.bash_profileඔබ සතු දේ වේ නම්.

~/.bash_rcකිසිදු වැඩසටහනක් කියවා නැති බව සලකන්න, එය ~/.bashrcඅන්තර්ක්‍රියාකාරී අවස්ථාවන්හි වින්‍යාස ගොනුව වේ. ඔබ තුළ පරිසර විචල්‍යයන් නිර්වචනය නොකළ යුතුය ~/.bashrc. වැනි පරිසරය විචල්ය නිර්වචනය කිරීමට හරි තැන PATHවේ ~/.profile(හෝ ~/.bash_profileඔබ bash හැර වෙනත් ෂෙල් වෙඩි ගැන තැකීමක් කරන්නේ නෑ නම්). බලන්න ඔවුන් අතර ඇති වෙනස කුමක්ද සහ මා භාවිතා කළ යුත්තේ කුමක්ද?

එය නොකරන්න /etc/environmentහෝ ~/.pam_environment: මෙම ඔයා වගේ ආෙද්ශක භාවිතා කළ නොහැකි, සිප්පි කටු ගොනු නොවේ $PATHඑහි හිටියා. මෙම ලිපිගොනු වලදී, ඔබට විචල්‍යයක් අභිබවා යා හැකිය, එයට එකතු නොකරන්න.

සමහර පද්ධති ස්ක්‍රිප්ට් වල ඇති විය හැකි සංකූලතා

exportවිචල්යය දැනටමත් පරිසරයේ තිබේ නම් ඔබට අවශ්ය නොවේ : විචල්යයේ වටිනාකමෙහි ඕනෑම වෙනසක් පරිසරය තුළ පිළිබිඹු PATHවේ. Always සෑම විටම පරිසරය තුළ; සියලුම යුනික්ස් පද්ධති එය ඉතා ඉක්මනින් සකසයි (සාමාන්‍යයෙන් පළමු ක්‍රියාවලියේදී, ඇත්ත වශයෙන්ම).

පිවිසුම් වේලාවේදී, ඔබට PATHදැනටමත් පරිසරයේ සිටීම සහ සමහර පද්ධති නාමාවලි අඩංගු වීම මත විශ්වාසය තැබිය හැකිය . ඔබ යම් ආකාරයක අථත්ය පරිසරයක් සැකසීමේදී මුල් වරට ක්රියාත්මක කළ හැකි පිටපතක් ලියන්නේ PATHනම්, PATHඑය හිස් හා අපනයනය නොවන බව සහතික කිරීමට ඔබට අවශ්ය විය හැකිය : තවමත් PATH=$PATH:/some/directoryසකසා PATHනොමැති නම්, එවිට සැකසූ දෙයක් :/some/directoryසහ හිස් සංරචකය ආරම්භයේ දී වත්මන් නාමාවලිය (වැනි .:/some/directory) අදහස් වේ.

if [ -z "${PATH-}" ]; then export PATH=/usr/local/bin:/usr/bin:/bin; fi

බාෂ් හැර වෙනත් ෂෙල් වෙඩි පිළිබඳ සටහන්

Bash, ksh හා zsh දී exportවිශේෂ කාරක රීති වන අතර, දෙකම PATH=~/opt/bin:$PATHහා export PATH=~/opt/bin:$PATHපවා හරි දේ කරන්න. වෙනත් බෝර්න් / පොසික්ස් විලාසිතාවේ ෂෙල් වැනි ඩෑෂ් ( /bin/shබොහෝ පද්ධතිවල) exportසාමාන්‍ය විධානයක් ලෙස විග්‍රහ කර ඇති අතර එයින් වෙනස්කම් දෙකක් අදහස් වේ:

ඒ නිසා ඩෑෂ් වැනි කවච, export PATH=~/opt/bin:$PATHකට්ටල PATHසාහිත්යමය string කිරීමට ~/opt/bin/:වටිනාකම අනුගමනය PATHපළමු අවකාශය දක්වා. PATH=~/opt/bin:$PATH(හිස් පැවරුමක්) සඳහා මිල ගණන් අවශ්‍ය නොවන අතර නිවැරදි දේ කරයි. ඔබට exportඅතේ ගෙන යා හැකි ස්ක්‍රිප්ට් එකක භාවිතා කිරීමට අවශ්‍ය නම් , ඔබ ලිවිය යුතුය export PATH="$HOME/opt/bin:$PATH", නැතහොත් PATH=~/opt/bin:$PATH; export PATH(හෝ PATH=$HOME/opt/bin:$PATH; export PATHබෝර්න් කවචයට පවා අතේ ගෙන යා හැකි, පිළි export var=valueනොගත් හා ව්‍යාප්ත නොකළ).

B බෝර්න් ෂෙල් වෙඩි වල මෙය සත්‍යයක් නොවීය (සැබෑ බෝර්න් කවචයේ මෙන් නොව නවීන පොසික්ස් විලාසිතාවේ ෂෙල් වෙඩි නොවේ), නමුත් මේ දිනවල ඔබට එවැනි පැරණි ෂෙල් වෙඩි හමුවීමට බොහෝ දුරට ඉඩ නැත.


අපනයනය සමඟ ඇති සංකූලතාව තවමත් තේරුම් ගැනීමට නොහැකි වී ඇත. කරුණාකර එය සරල කළ හැකිද?
prijeet priyom

@priojeetpriyom සරල පැහැදිලි කිරීම: ඔබට අවශ්‍ය නැත export.
ගිලෙස්ගේ SO- නපුරු වීම නවත්වන්න '

1
මෙම පිළිතුරට ස්තූතියි, පරිපූර්ණ සවිස්තරාත්මක. ඔබ පවසන්නේ " ඔබ ~ / .bashrc හි පරිසර විචල්‍යයන් නිර්වචනය නොකළ යුතුය ", නමුත් අවාසනාවකට මගේ පද්ධතිය තුළ ස්ථාපනය කර ඇති වැඩසටහන් වලින් 100% ක්ම මාර්ගය වෙනස් කරන (FZF සහ Rust's Cargo) මාර්ගය වෙනස් කරයි .bashrc. මම හිතන්නේ FZF රස්ට් වල ලියා ඇති නිසා එය රස්ට් රටාව අනුගමනය කරයි.
icc97

එය ද විය හැකිද export PATH...
therobyouknow

88

කෙසේ හෝ ක්‍රියා කරයි, නමුත් ඔවුන් එකම දේ නොකරයි: මූලද්‍රව්‍ය PATHවමේ සිට දකුණට පරීක්ෂා කරනු ලැබේ. ඔබගේ පළමු උදාහරණයේ දී, ක්‍රියාත්මක කළ හැකි ~/opt/binදේ ස්ථාපනය කර ඇති ඒවාට වඩා ප්‍රමුඛතාවයක් ඇත, නිදසුනක් ලෙස, දී /usr/bin, ඔබට අවශ්‍ය දේ හෝ නොවිය හැකිය.

විශේෂයෙන්, ආරක්‍ෂිත දෘෂ්ටි කෝණයකින්, ඉදිරිපස මාර්ග එකතු කිරීම භයානක ය, මන්ද යමෙකුට ඔබේ ලිඛිත ප්‍රවේශය ලබා ගත හැකි නම් ~/opt/bin, ඔවුන්ට වෙනත් lsතැනක තැබිය හැකිය, උදාහරණයක් ලෙස, ඔබ එහි භාවිතා කරන්නේ වෙනත් තැනක ය. ක /bin/lsඇරිය තොරව. දැන් sshඔබේ බ්‍රව්සරයට හෝ තේරීමට සමාන යැයි සිතන්න ... (ඔබේ මාවතේ තැබීම සඳහා එය තුන් ගුණයකින් වැඩි වේ.)


8
නමුත් ඔබට ඔබේම, අභිරුචිකරණය කළ අනුවාදයක් ලබා ගැනීමට lsඅවශ්‍ය නම් , ඔබ එය ඉදිරියෙන් නාමාවලියක තැබිය යුතුය /bin.
බාර්මාර්

17
හෝ අන්වර්ථය ls = myls
waltinator

39

මම 2 වන ප්‍රශ්නය මගින් ව්‍යාකූල වී සිටිමි (එය සම්බන්ධ නොවූ ගැටලුවක් නිසා ප්‍රශ්නයෙන් ඉවත් කර ඇති බැවින්):

විවිධ රේඛා ඔස්සේ තවත් මාර්ග එකතු කිරීමට ක්‍රියා කළ හැකි ක්‍රමයක් කුමක්ද? මුලදී මම හිතුවා මේක උපක්‍රමය කරන්න පුළුවන් කියලා:

export PATH=$PATH:~/opt/bin
export PATH=$PATH:~/opt/node/bin

නමුත් එසේ නොවන්නේ දෙවන පැවරුම එකතු කිරීම ~/opt/node/binපමණක් නොව, PATHකලින් පවරා ඇති සමස්තය ද නොවේ .

මෙය කළ හැකි විසඳුමක්:

export PATH=$PATH:~/opt/bin:~/opt/node/bin

නමුත් කියවීමේ හැකියාව සඳහා එක් මාවතක් සඳහා එක් පැවරුමක් ලබා ගැනීමට මම කැමැත්තෙමි.

ඔබ කිව්වොත්

PATH=~/opt/bin

බව ය සියලු ඔබගේ මාර්ගය වනු ඇත බව. PATH යනු පරිසර විචල්‍යයක් පමණක් වන අතර, ඔබට PATH වෙත එක් කිරීමට අවශ්‍ය නම්, ඔබට අවශ්‍ය අන්තර්ගතය සමඟ විචල්‍යය නැවත ගොඩනඟා ගත යුතුය. එනම්, 2 වන ප්‍රශ්නයට උදාහරණයක් ලෙස ඔබ ලබා දෙන දෙය හරියටම ඔබට කිරීමට අවශ්‍ය දෙයයි, මට ප්‍රශ්නයේ කාරණය මුළුමනින්ම මග හැරී ඇත්නම් මිස.

මම මගේ කේතයේ ආකෘති දෙකම භාවිතා කරමි. අතුරුදහන් විය හැකි නාමාවලි සඳහා ඉඩ සැලසීමට මා වැඩ කරන සෑම යන්ත්‍රයකම ස්ථාපනය කරන සාමාන්‍ය පැතිකඩක් මා සතුව ඇත:

export PATH=/opt/bin:/usr/local/bin:/usr/contrib/bin:/bin:/usr/bin:/usr/sbin:/usr/bin/X11
# add optional items to the path
for bindir in $HOME/local/bin $HOME/bin; do
    if [ -d $bindir ]; then
        PATH=$PATH:${bindir}
    fi
done

2
2 වන ප්‍රශ්නයේ උදාහරණය ගැන ඔබ හරි, එය ක්‍රියාත්මක වේ. මගේ පද්ධතියේ තවත් PATH සම්බන්ධ ගැටලුවක් මා ව්‍යාකූල කළේය. ඒකට සමාවෙන්න.
පාවුලෝ

36

එකතු කිරීම / සකස් කිරීම පිළිබඳ වෙඩි නොවදින ක්‍රමය

එකතු කිරීම හා පෙර සූදානම තෝරා ගැනීමේදී සලකා බැලිය යුතු කරුණු රාශියක් ඇත. ඒවායින් බොහොමයක් වෙනත් පිළිතුරු වලින් ආවරණය වී ඇති බැවින් මම ඒවා මෙහි නැවත නොකියමි.

වැදගත් කරුණක් නම්, පද්ධති ස්ක්‍රිප්ට් මෙය භාවිතා නොකලත් (ඇයිදැයි මට සිතේ) * 1 , $HOME/binPATH පරිසර විචල්‍යයට මාර්ගයක් (උදා. ) එක් කිරීමට වෙඩි නොවදින ක්‍රමයයි.

PATH="${PATH:+${PATH}:}$HOME/bin"

එකතු කිරීම සඳහා (වෙනුවට PATH="$PATH:$HOME/bin") සහ

PATH="$HOME/bin${PATH:+:${PATH}}"

පෙර සූදානම සඳහා (වෙනුවට PATH="$HOME/bin:$PATH")

මෙය $PATHමුලින් හිස්ව ඇති විට ව්‍යාජ ප්‍රමුඛ / පසුපස කොලොන් මඟහරින අතර , එය අනවශ්‍ය අතුරු ආබාධ ඇති කළ හැකි අතර එය බියකරු සිහිනයක් බවට පත්විය හැකිය , සොයා ගැනීමට අපොහොසත් වේ ( මෙම පිළිතුර කෙටියෙන් සලකා awkබලයි).

පැහැදිලි කිරීම ( ෂෙල් පරාමිති ප්‍රසාරණයෙන් ):

${parameter:+word}

නම් parameterශූන්ය හෝ ශූන්යය වන අතර, කිසිවක් ආදේශ වී ඇත, එසේ පුළුල් wordආදේශ වී ඇත.

මේ අනුව, පහත ${PATH:+${PATH}:}පරිදි පුළුල් වේ: 1) කිසිවක්, PATHශුන්‍ය හෝ සැකසූ ${PATH}:නම් , 2) , PATHසකසා ඇත්නම් .

සටහන : මෙය bash සඳහා ය.


* 1 වැනි ස්ක්‍රිප්ට් devtoolset-6/enableඇත්ත වශයෙන්ම මෙය භාවිතා කරන බව මම සොයාගෙන ඇත ,

$ cat /opt/rh/devtoolset-6/enable
# General environment variables
export PATH=/opt/rh/devtoolset-6/root/usr/bin${PATH:+:${PATH}}
...

25

$PATHපරිසර විචල්‍යය සමඟ ක්‍රියාත්මක කළ හැකි සෙවුම් මාර්ගය ලිනක්ස් විසින් තීරණය කරයි . $PATHපරිසර විචල්‍යයේ ආරම්භයට නාමාවලිය / දත්ත / මිස්ක්‍රිප්ට් එක් කිරීමට , පහත සඳහන් දෑ භාවිතා කරන්න:

PATH=/data/myscripts:$PATH

එම නාමාවලිය මාර්ගයේ අවසානයට එක් කිරීමට, පහත විධානය භාවිතා කරන්න:

PATH=$PATH:/data/myscripts

නමුත් පූර්විකාව ප්‍රමාණවත් නොවේ, මන්ද ඔබ ස්ක්‍රිප්ට් එකක් තුළ පරිසර විචල්‍යයක් සැකසූ විට, එම වෙනස effective ලදායී වන්නේ ස්ක්‍රිප්ට් තුළ පමණි. මෙම සීමාව වටා ඇත්තේ ක්‍රම දෙකක් පමණි:

  • ස්ක්‍රිප්ට් එක තුළ නම්, ඔබ පරිසර විචල්‍යය අපනයනය කරන්නේ එය ස්ක්‍රිප්ට් විසින් හඳුන්වන ඕනෑම වැඩසටහන් තුළ effective ලදායී වේ. ස්ක්‍රිප්ට් යනුවෙන් හැඳින්වෙන වැඩසටහන තුළ එය effective ලදායී නොවන බව සලකන්න.
  • ස්ක්‍රිප්ටයට ඇමතුම ලබා දෙන වැඩසටහන ඇමතුම වෙනුවට ඇතුළත් කිරීමෙන් එසේ කරන්නේ නම්, ස්ක්‍රිප්ටයේ ඕනෑම පරිසර වෙනස් කිරීමක් ඇමතුම් වැඩසටහන තුළ ක්‍රියාත්මක වේ. එවැනි ඇතුළත් කිරීම් dot විධානය හෝ ප්‍රභව විධානය සමඟ කළ හැකිය.

උදාහරණ:

$HOME/myscript.sh
source $HOME/myscript.sh

ඇතුළත් කිරීම මූලික වශයෙන් "ඇමතුම්" ස්ක්‍රිප්ටයේ "කැඳවූ" පිටපත ඇතුළත් කරයි. එය සී හි # ඇතුළත් කිරීමක් වැනි ය. එබැවින් එය "ඇමතුම්" ස්ක්‍රිප්ට් හෝ වැඩසටහන තුළ effective ලදායී වේ. නමුත් ඇත්ත වශයෙන්ම, ඇමතුම් වැඩසටහන විසින් කැඳවනු ලබන කිසිදු වැඩසටහනක හෝ ස්ක්‍රිප්ට් වල එය effective ලදායී නොවේ. ඇමතුම් දාමයේ සිට එය effective ලදායී කිරීමට, අපනයන විධානයක් සමඟ පරිසර විචල්‍යය සැකසීම අනුගමනය කළ යුතුය.

උදාහරණයක් ලෙස, bash shell වැඩසටහන ඇතුළත් කිරීමෙන් .bash_profile ගොනුවේ අන්තර්ගතය අන්තර්ගත වේ. පහත දැක්වෙන පේළි 2 .bash_profile හි තබන්න:

PATH=$PATH:/data/myscripts
export PATH

එම කේත පේළි 2 effectively ලදායී ලෙස bash වැඩසටහනට ඇතුළත් කරයි. එබැවින් bash තුළ, $ PATH විචල්‍යයට ඇතුළත් $HOME/myscript.shවන අතර, අපනයන ප්‍රකාශය නිසා, bash විසින් හඳුන්වන ඕනෑම වැඩසටහනකට වෙනස් වූ $PATHවිචල්‍යය ඇත. ඔබ බාෂ් විමසුමේ සිට ධාවනය කරන ඕනෑම වැඩසටහනක් බාෂ් විසින් හඳුන්වනු ලබන බැවින්, ඔබ බාෂ් විමසුමේ සිට ධාවනය වන ඕනෑම දෙයක් සඳහා නව මාවත ක්‍රියාත්මක වේ.

අවසාන කරුණ නම්, මාර්ගයට නව ඩිරෙක්ටරියක් එක් කිරීමට නම්, ඔබ ෂෙල් එකට ඇතුළත් කර ඇති ස්ක්‍රිප්ට් එකක් තුළ $ PATH පරිසර විචල්‍යයට නාමාවලිය එකතු කිරීම හෝ සකස් කිරීම කළ යුතු අතර ඔබ $PATHපරිසර විචල්‍යය අපනයනය කළ යුතුය.

වැඩි විස්තර මෙතැනින්


20

කලක සිට මම කාර්යයන් දෙකක් මා සමඟ තබා ඇති pathaddඅතර pathrmඑමඟින් අනුපිටපත් ගැන කරදර නොවී මාර්ගයට මූලද්‍රව්‍ය එකතු කිරීමට උපකාරී වේ.

pathaddතනි මාර්ග තර්කයක් සහ විකල්ප afterතර්කයක් ගෙන ඇති අතර එය සපයනු PATHලැබුවහොත් එය වෙනත් ආකාරයකින් එකතු වේ .

සෑම අවස්ථාවකම පාහේ ඔබ මාර්ගයට එකතු කරන්නේ නම් ඔබට දැනටමත් මාර්ගයේ ඇති ඕනෑම දෙයක් අභිබවා යාමට අවශ්‍ය වනු ඇත, ඒ නිසා මම පෙරනිමියෙන් සූදානම් වීමට කැමැත්තෙමි.

pathadd() {
    newelement=${1%/}
    if [ -d "$1" ] && ! echo $PATH | grep -E -q "(^|:)$newelement($|:)" ; then
        if [ "$2" = "after" ] ; then
            PATH="$PATH:$newelement"
        else
            PATH="$newelement:$PATH"
        fi
    fi
}

pathrm() {
    PATH="$(echo $PATH | sed -e "s;\(^\|:\)${1%/}\(:\|\$\);\1\2;g" -e 's;^:\|:$;;g' -e 's;::;:;g')"
}

PATH පරිසරය වෙනස් කිරීමට ඔබ කැමති ඕනෑම පිටපතකට මේවා දමන්න, ඔබට දැන් කළ හැකිය.

pathadd "/foo/bar"
pathadd "/baz/bat" after
export PATH

එය දැනටමත් තිබේ නම් මාවතට එක් නොවන බවට ඔබට සහතිකයි. ඔබට දැන් සහතික කිරීමට අවශ්‍ය /baz/batනම් ආරම්භයේදීම.

pathrm "/baz/bat"
pathadd "/baz/bat"
export PATH

දැන් ඕනෑම මාර්ගයක් දෙගුණයක් නොමැතිව දැනටමත් මාර්ගයේ තිබේ නම් එය ඉදිරියට ගෙන යා හැකිය.


ඔබගේ PATH හි නාමාවලියක් තිබේදැයි පරීක්ෂා කිරීම සඳහා අදාළ හා පිරිසිදු ප්‍රවේශය: unix.stackexchange.com/a/32054/135943
වයිල්ඩ්කාඩ්

10

මට වෙනත් බෙදාහැරීම් සඳහා කථා කළ නොහැක, නමුත් උබුන්ටු ගොනුවක් ඇත, / etc / environment, එය සියලු පරිශීලකයින් සඳහා සුපුරුදු සෙවුම් මාර්ගයයි. මගේ පරිගණකය මා විසින් පමණක් භාවිතා කරන බැවින්, මම ස්ක්‍රිප්ට් එකක තැබූ තාවකාලික එකතු කිරීමක් මිස, මට අවශ්‍ය ඕනෑම ඩිරෙක්ටරි මගේ මාවතේ තබමි.


7

PATHපරිසර විචල්‍යයට නව මාවතක් එක් කිරීමට :

export PATH=$PATH:/new-path/

ඔබ විවෘත කරන සෑම කවචයකටම මෙම වෙනස යෙදීම සඳහා, එය ක්‍රියාත්මක කරන විට කවචය ප්‍රභව වන ගොනුවට එය එක් කරන්න . විවිධ කවච වලදී මෙය විය හැකිය:

  • බෑෂ් ෂෙල්: ~ / .bash_profile, ~ / .bashrc හෝ පැතිකඩ
  • Korn Shell: ~ / .kshrc හෝ .profile
  • ඉසෙඩ් ෂෙල්: ~ / .zshrc හෝ .zprofile

උදා

# export PATH=$PATH:/root/learning/bin/
# source ~/.bashrc
# echo $PATH

ඉහත ප්‍රතිදානයේ දී ඔබට සපයා ඇති මාර්ගය දැකිය හැකිය.


7

එය භාවිතා PATH=/a/b:$PATHකිරීම සඳහා මාර්ගයක් එක් කිරීමට “වැරදි” ක්‍රමයක් ලෙස සැලකිය හැකි අවස්ථා තිබේ PATH:

  1. ඇත්ත වශයෙන්ම නාමාවලියක් නොවන මාර්ගයක් එක් කිරීම.
  2. දැනටමත් PATHඑකම ස්වරූපයෙන් ඇති මාර්ගයක් එක් කිරීම .
  3. සාපේක්ෂ මාර්ගයක් එක් කිරීම (ඔබ වර්තමාන වැඩ කරන නාමාවලිය වෙනස් කරන විට සෙවූ සත්‍ය නාමාවලිය වෙනස් වන බැවින්).
  4. දැනටමත් PATHවෙනත් ආකාරයකින් පවතින මාර්ගයක් එක් කිරීම (එනම්, සිම්ලින්ක් භාවිතා කිරීම නිසා අන්වර්ථයකි ..).
  5. ඔබ 4 කිරීමෙන් වැළකී සිටින්නේ නම්, PATHවෙනත් ඇතුලත් කිරීම් අභිබවා යාමට අදහස් කරන විට මාර්ගය ඉදිරිපස දෙසට නොයන්න PATH.

මෙම (Bash-only) ශ්‍රිතය ඉහත අවස්ථා වලදී “නිවැරදි දේ” කරයි (ව්‍යතිරේකයක් සහිතව, පහත බලන්න), දෝෂ කේත නැවත ලබා දෙයි, සහ මිනිසුන් සඳහා හොඳ පණිවිඩ මුද්‍රණය කරයි. දෝෂ කේත සහ පණිවිඩ අවශ්‍ය නොවන විට අක්‍රිය කළ හැකිය.

prepath() {
    local usage="\
Usage: prepath [-f] [-n] [-q] DIR
  -f Force dir to front of path even if already in path
  -n Nonexistent dirs do not return error status
  -q Quiet mode"

    local tofront=false errcode=1 qecho=echo
    while true; do case "$1" in
        -f)     tofront=true;       shift;;
        -n)     errcode=0;          shift;;
        -q)     qecho=':';          shift;;
        *)      break;;
    esac; done
    # Bad params always produce message and error code
    [[ -z $1 ]] && { echo 1>&2 "$usage"; return 1; }

    [[ -d $1 ]] || { $qecho 1>&2 "$1 is not a directory."; return $errcode; }
    dir="$(command cd "$1"; pwd -P)"
    if [[ :$PATH: =~ :$dir: ]]; then
        $tofront || { $qecho 1>&2 "$dir already in path."; return 0; }
        PATH="${PATH#$dir:}"        # remove if at start
        PATH="${PATH%:$dir}"        # remove if at end
        PATH="${PATH//:$dir:/:}"    # remove if in middle
    fi
    PATH="$dir:$PATH"
}

ව්‍යතිරේකය නම්, මෙම ශ්‍රිතය PATHවෙනත් මාර්ග ඔස්සේ එකතු කරන ලද මාර්ග කැනොනිකල්කරණය නොකිරීමයි , එබැවින් මාර්ගයක් සඳහා කැනොනිකල් නොවන අන්වර්ථයක් තිබේ නම් PATH, මෙය අනුපිටපතක් එක් කරයි. දැනටමත් මාර්ග canonicalize කිරීමට උත්සාහ PATHකිරීමට සමත් වන විට සාපේක්ෂ මාර්ගය පැහැදිලි අර්ථයක් ඇත සිට dicey ප්රස්තුතයක් prepathනමුත් මේ වන විටත් එම මාර්ගයේ ඔබ එය එකතු වූ විට වත්මන් කම්කරු බහලුම දේ දන්නේ නැහැ විට.


සාපේක්ෂ මාර්ග සම්බන්ධයෙන්: '-r' ස්විචයක් තිබීම ගැන කුමක් කිව හැකිද, එය මුලින් නිරපේක්ෂ නොවී මාර්ගය එකතු කරන අතර එය එකතු කිරීමට පෙර එය නිරපේක්ෂ යැයි සොයනු ඇත. මෙය ස්ක්‍රිප්ට් නම්, කෙනෙකුට එය වෙනත් ෂෙල් වෙඩි වල භාවිතා කළ හැකිය. එය ශ්‍රිතයක් ලෙස තිබීමෙන් යම් ප්‍රයෝජනයක් තිබේද? නියම කේතය!
hoijui

1
@hoijui එය ශ්‍රිතයක් විය යුත්තේ එය වත්මන් පරිසරය වෙනස් කරන බැවිනි. එය ස්ක්‍රිප්ට් එකක් නම්, එය ස්ක්‍රිප්ට් ධාවනය වන උපසිරැසි වල පරිසරය වෙනස් කරන අතර, පිටපත පිටවන විට $PATHඔබට පෙර තිබූ ආකාරයටම තිබේ. සඳහා පරිදි -r, නැහැ, මම සාපේක්ෂ මාර්ග හිතන්නේ $PATHපමණක් ද විශ්වාසය තැබිය නොහැකි හා අමුතුයි (ඔබගේ මාර්ගය සෑම අවස්ථාවකදීම ඔබ වෙනස් cd!) සාමාන්ය මෙවලමක් ඒ වගේ සහයෝගය දෙයක් කිරීමට අවශ්ය ය.
cjs

6

මට (මැක් ඕඑස් එක්ස් 10.9.5 හි), /mypathnameගොනුවට මාර්ගයේ නම (උදා ) එකතු කිරීම /etc/pathsඉතා හොඳින් ක්‍රියාත්මක විය.

සංස්කරණය කිරීමට පෙර, echo $PATHආපසු:

/usr/bin:/bin:/usr/sbin:/sbin:/usr/local/bin

/etc/pathsකවචය සංස්කරණය කර නැවත ආරම්භ කිරීමෙන් පසු $ PATH විචල්‍යය එකතු වේ /pathname. ඇත්ත වශයෙන්ම, echo $PATHප්‍රතිලාභ:

/usr/bin:/bin:/usr/sbin:/sbin:/usr/local/bin:/mypathname

එම සිදු වූයේ /mypathnameවෙත ඇත්තා වූ ද, ඇත $PATHවිචල්ය.


3
/ Etc / paths ගොනුව සංස්කරණය කිරීමට වඩා /etc/paths.d බහලුම වෙත ගොනුවක් එක් කිරීම වඩා හොඳය.
rbrewer

5

මෙන්න මගේ විසඳුම:

PATH=$(echo -n $PATH | awk -v RS=: -v ORS=: '!x[$0]++' | sed "s/\(.*\).\{1\}/\1/")

පසුපස නොයන ලස්සන පහසු ලයිනර් එකක් :


1
-bash: awk: එවැනි ගොනුවක් හෝ නාමාවලියක් නැත -bash: sed: එවැනි ගොනුවක් හෝ නාමාවලියක් නොමැත
davidcondrey

1
avdavidcondrey - awk සහ sed යනු ඉතා පොදු බාහිර විධාන වේ. මෙම පිළිතුර එය සාක්ෂාත් කර ගැනීම සඳහා පිරිසිදු ක්‍රමයක් සපයයි, එබැවින් අවදි සහ / හෝ සෙඩ් නොමැති අවස්ථාවන්හිදී පවා එය ක්‍රියාත්මක වේ (හෝ ඒවායේ නාමාවලි මාර්ගයේ නොමැත!)
sancho.s ReinstateMonicaCellio
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.