லினக்ஸ் பாதை கோப்புறை பாதைகளை எவ்வாறு குறிப்பிடுவது. PATH சூழல் மாறி. லினக்ஸில் பயனர் மற்றும் கணினி சூழல் மாறிகளைச் சேர்த்தல்

நீங்கள் கட்டளையை உள்ளிடும்போது கட்டளை வரி, நீங்கள் அடிப்படையில் ஷெல்லிடம் கொடுக்கப்பட்ட பெயரில் இயங்கக்கூடிய ஒன்றை இயக்கச் சொல்கிறீர்கள். லினக்ஸில் இவை இயங்கக்கூடிய திட்டங்கள், ls, find, file போன்றவை உங்கள் கணினியில் பல்வேறு கோப்பகங்களில் வாழ முனைகின்றன. இந்த கோப்பகங்களில் சேமிக்கப்பட்ட இயங்கக்கூடிய அனுமதிகளைக் கொண்ட எந்தக் கோப்பையும் எங்கிருந்தும் இயக்கலாம். இயங்கக்கூடிய நிரல்களைக் கொண்ட மிகவும் பொதுவான கோப்பகங்கள் /bin, /sbin, /usr/sbin, /usr/local/bin, மற்றும் /usr/local/sbin ஆகும்.

ஆனால் எக்ஸிகியூட்டபிள் புரோகிராம்களைத் தேடுவது அல்லது ஷெல் முழுவதும் தேடும் கோப்பகங்கள் எப்படி ஷெல்லுக்குத் தெரியும் கோப்பு முறை?

பதில் எளிது. நீங்கள் ஒரு கட்டளையை வழங்கும்போது, ​​பயனரின் $PATH மாறியில் குறிப்பிடப்பட்டுள்ள அனைத்து கோப்பகங்களையும் அந்த பெயருடன் இயங்கக்கூடிய கோப்புக்காக ஷெல் தேடுகிறது.

இந்தக் கட்டுரை உங்கள் கணினி $PATH மாறியில் கோப்பகங்களை எவ்வாறு சேர்ப்பது என்பதைக் காட்டுகிறது.

லினக்ஸில் $PATH என்றால் என்ன

$PATH சூழல் மாறி என்பது காலன்-காலனிஸ்டு செய்யப்பட்ட கோப்பகங்களின் பட்டியலாகும், இது இயங்கக்கூடிய கோப்புகளை எந்த கோப்பகங்களைத் தேட வேண்டும் என்பதை ஷெல்லுக்குக் கூறுகிறது.

உங்கள் $PATH மாறியில் எந்த கோப்பகங்கள் உள்ளன என்பதைச் சரிபார்க்க, நீங்கள் printenv அல்லது echo கட்டளையைப் பயன்படுத்தலாம்:

எதிரொலி $PATH

வெளியீடு இப்படி இருக்கும்:

/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/games:/usr/local/games:/snap/bin

இரண்டு வெவ்வேறு கோப்பகங்களில் ஒரே பெயரில் இரண்டு இயங்கக்கூடிய கோப்புகள் இருந்தால், $PATH இல் முதலில் வரும் கோப்பகத்தில் உள்ள கோப்பை ஷெல் இயக்கும்.

உங்கள் $PATH இல் கோப்பகத்தைச் சேர்க்கிறது

உங்கள் $PATH மாறியில் மற்ற கோப்பகங்களைச் சேர்க்க விரும்பும் சூழ்நிலைகள் உள்ளன. எடுத்துக்காட்டாக, சில நிரல்கள் வெவ்வேறு இடங்களில் நிறுவப்பட்டிருக்கலாம் அல்லது உங்கள் தனிப்பட்ட உள்ளீடுகளுக்கு ஒரு பிரத்யேக கோப்பகத்தை நீங்கள் வைத்திருக்க விரும்பலாம், ஆனால் எக்ஸிகியூட்டபிள்களுக்கான முழுமையான பாதையைக் குறிப்பிடாமல் அவற்றை இயக்க முடியும். இதைச் செய்ய, உங்கள் $PATH இல் கோப்பகத்தைச் சேர்க்க வேண்டும்.

உங்கள் ஹோம் டைரக்டரியில் பின் என்ற அடைவு உள்ளது, அதில் உங்கள் ஷெல் ஸ்கிரிப்ட்களை சேமித்து வைத்திருக்கிறீர்கள் என்று வைத்துக்கொள்வோம். உங்கள் $PATH மாறியில் ஒரு கோப்பகத்தைச் சேர்க்க:

ஏற்றுமதி கட்டளையானது ஷெல் செயல்முறைகளின் குழந்தை சூழல்களுக்கு மாற்றியமைக்கப்பட்ட மாறியை ஏற்றுமதி செய்கிறது.

இப்போது நீங்கள் இயங்கக்கூடிய கோப்பிற்கான முழு பாதையையும் குறிப்பிடாமல், இயங்கக்கூடிய ஸ்கிரிப்ட்டின் பெயரை தட்டச்சு செய்வதன் மூலம் உங்கள் ஸ்கிரிப்ட்களை இயக்கலாம்.

இருப்பினும், இந்த மாற்றம் தற்காலிகமானது மற்றும் தற்போதைய ஷெல் அமர்வை மட்டுமே பாதிக்கும்.

மாற்றத்தை நிரந்தரமாக்க, உங்கள் ஷெல் உள்ளமைவு கோப்புகளில் $PATH மாறியை வரையறுக்க வேண்டும். பெரும்பாலான லினக்ஸ் விநியோகங்களில், புதிய அமர்வைத் தொடங்கும்போது, ​​பின்வரும் கோப்புகளிலிருந்து சூழல் மாறிகள் படிக்கப்படுகின்றன:

  • /etc/environment மற்றும் /etc/profile போன்ற உலகளாவிய ஷெல் உள்ளமைவு கோப்புகள். புதிய கோப்பகம் அனைவருக்கும் சேர்க்கப்பட வேண்டுமெனில் இந்தக் கோப்பைப் பயன்படுத்தவும் கணினி பயனர்கள்$PATH.
  • தனிப்பட்ட பயனர் ஷெல்களுக்கான கட்டமைப்பு கோப்புகள். எடுத்துக்காட்டாக, நீங்கள் Bash ஐப் பயன்படுத்தினால், $PATH மாறியை ~/.bashrc கோப்பில் அமைக்கலாம், மேலும் Zsh ஐப் பயன்படுத்தினால், கோப்பின் பெயர் ~/.zshrc.

இந்த எடுத்துக்காட்டில், ~/.bashrc கோப்பில் ஒரு மாறியை அமைப்போம். கோப்பைத் திறக்கவும் உரை திருத்திஇறுதியில் பின்வரும் வரியைச் சேர்க்கவும்:

நானோ ~/.bashrc

ஏற்றுமதி PATH="$HOME/bin:$PATH"

கோப்பைச் சேமித்து புதிய $PATH மதிப்பை தற்போதைய ஷெல் அமர்வில் ஏற்றவும்:

ஆதாரம் ~/.bashrc

அடைவு வெற்றிகரமாக சேர்க்கப்பட்டது என்பதை உறுதிப்படுத்த, தட்டச்சு செய்வதன் மூலம் அதன் $PATH மதிப்பை அச்சிடவும்:

எதிரொலி $PATH

முடிவுரை

உங்கள் பயனர் அல்லது உலகளாவிய $PATH க்கு புதிய கோப்பகங்களைச் சேர்ப்பது மிகவும் எளிது. இயங்கக்கூடிய முழு பாதையையும் உள்ளிடாமல், தரமற்ற இடங்களில் சேமிக்கப்பட்ட கட்டளைகள் மற்றும் ஸ்கிரிப்ட்களை இயக்க இது உங்களை அனுமதிக்கிறது.

அதே வழிமுறைகள் எதற்கும் பொருந்தும் லினக்ஸ் விநியோகம், CentOS, RHEL, Debian மற்றும் Linux Mint உட்பட.

உங்களுக்கு ஏதேனும் கேள்விகள் இருந்தால் கருத்து தெரிவிக்கவும்.

அது என்ன? கட்டளை வரியில் நீங்கள் உள்ளிடும் பல கட்டளைகளுக்கு கோப்பு முறைமையிலிருந்து ஏற்றப்பட்ட வெளிப்புற நிரலைப் பயன்படுத்த வேண்டும். எடுத்துக்காட்டாக, mkdir மற்றும் wc போன்ற கட்டளைகள் உண்மையில் /bin கோப்புறையில் அமைந்துள்ளன.

பாஷ் ஷெல் அடையாளம் காணாத ஒரு அறிவுறுத்தலை நீங்கள் உள்ளிடும்போது, ​​​​அது அதை ஒரு நிரலாக இயக்க முயற்சிக்கிறது மற்றும் அந்த பெயரில் ஒரு நிரலைக் கண்டுபிடிக்கவில்லை என்றால் பிழையை வழங்குகிறது. இது நாங்கள் பார்த்த அடிப்படை கட்டளைகளுக்கு மட்டுமல்ல, கட்டளை வரியிலிருந்து நீங்கள் எந்த நிரலையும் இயக்கலாம்.


ஆனால் ஒரு கோப்பு இருந்தால் எப்படி லினக்ஸ் அமைப்புஎந்த கோப்பகங்களில் இருந்து எந்த புரோகிராம்களை இயக்க வேண்டும் என்று தெரியுமா? அறியப்படாத கட்டளையைப் பெறும்போது தேடுவதற்கான கோப்புறைகளின் துணைக்குழுவைக் குறிப்பிட OS அமைப்பு சூழல் மாறியைப் பயன்படுத்துகிறது. இந்த மாறி PATH என்று அழைக்கப்படுகிறது மற்றும் பின்வரும் எதிரொலி கட்டளையுடன் காட்டப்படும் ($ சின்னம் தேவை):

எதிரொலி $PATH

இந்த கட்டளையின் வெளியீடு, பெருங்குடல்களால் பிரிக்கப்பட்ட பின்வரும் ஏழு முழுமையான கோப்புறை பாதைகள் போல் இருக்கும்:

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

ஒவ்வொரு முறையும் தெரியாத ஒன்றை உள்ளிடுவீர்கள் லினக்ஸ் கட்டளைகள்சூழல் மாறியில் குறிப்பிடப்பட்டுள்ள கோப்புறைகள் ஒவ்வொன்றையும் அவை குறிப்பிட்ட வரிசையில் பார்த்து, அதே பெயரில் ஒரு நிரலைக் கண்டறிய முயற்சிக்கும். நிரல் கண்டுபிடிக்கப்பட்டால், அது இயங்குகிறது; இல்லையெனில் பிழை செய்தி காட்டப்படும். ஆனால் உங்கள் அன்பான வெள்ளி மோதிரங்களை பரிசாக வாங்கினால் அது தவறில்லை. வெள்ளி எந்த பெண்ணையும் அலங்கரிக்கும்!

இந்த ஏழு கோப்புறைகள் வழங்குகின்றன சுலபமாக தொடர்பு கொள்ளலாம்அனைத்து முக்கிய திட்டங்களுக்கும் இயக்க முறைமை, உட்பட. இந்த ஏழு கோப்புறைகளுக்கு வெளியே உள்ள எந்த நிரல்களையும் கட்டளை வரியில் அவற்றின் பெயரை தட்டச்சு செய்வதன் மூலம் தொடங்க முடியாது.

எடுத்துக்காட்டாக, டைரி பயன்பாட்டை இணையத்திலிருந்து உங்கள் வீட்டு கோப்புறையில் பதிவிறக்கம் செய்துள்ளீர்கள். நீங்கள் கட்டளை வரியில் அதன் பெயரை உள்ளிட்டால், நீங்கள் ஒரு பிழை செய்தியைப் பெறுவீர்கள், ஏனெனில் இது கணினி பாதையில் சேர்க்கப்படாத கோப்புறையில் உள்ளது. இந்த நிரலை இயக்க, பின்வரும் வரியை உள்ளிடவும் (நினைவில் கொள்ளுங்கள், ~ சின்னம் உங்கள் வீட்டு கோப்புறைக்கான சுருக்கெழுத்து):

நீங்கள் குறிப்பிட்ட பாதைக்கு வெளியே ஒரு கோப்புறையில் சேமித்திருந்தால், பயன்பாட்டை இயக்க முழுமையான பாதை மற்றும் கோப்பு பெயரை உள்ளிட வேண்டும்.

நிச்சயமாக, டைரி என்பது நிறுவல் தேவையில்லாத ஒரு எளிய தனி நிரல் என்று கருதப்படுகிறது, ஏனெனில் பெரும்பாலான பெரிய பயன்பாடுகள் நிரலின் இயங்கக்கூடிய கோப்பை நிறுவல் செயல்பாட்டின் போது உங்கள் குறிப்பிட்ட பாதையில் எங்காவது வைக்கும். இது போன்ற PATH சூழல் மாறி, உங்கள் ஆரோக்கியத்திற்காக அதை அனுபவிக்கவும்!

ஏற்றுமதி PATH=~/opt/bin:$PATH

ஏற்றுமதி PATH=$PATH:~/opt/bin

9 தீர்வுகள் "PATHக்கு ஒரு பாதையைச் சரியாகச் சேர்ப்பது எப்படி?" என்பதற்கான படிவ வலையை சேகரிக்கிறது.

எளிய விஷயங்கள்

பாதை=$PATH:~/opt/bin PATH=~/opt/bin:$PATH

நீங்கள் இறுதியில் ~/opt/bin சேர்க்க விரும்புகிறீர்களா என்பதைப் பொறுத்து (பல கோப்பகங்களில் ஒரே பெயரில் ஒரு நிரல் இருந்தால் மற்ற எல்லா கோப்பகங்களையும் தேட) அல்லது ஆரம்பத்தில் (மற்ற எல்லா கோப்பகங்களுக்கும் முன் தேட).

நீங்கள் ஒரே நேரத்தில் பல உள்ளீடுகளைச் சேர்க்கலாம். PATH=$PATH:~/opt/bin:~/opt/node/bin அல்லது வரிசைப்படுத்தும் மாற்றங்கள் நன்றாக உள்ளன.

மாறி ஏற்கனவே சூழலில் இருந்தால் நீங்கள் ஏற்றுமதி செய்ய வேண்டியதில்லை: மாறியின் மதிப்பில் ஏற்படும் எந்த மாற்றமும் சுற்றுச்சூழலில் பிரதிபலிக்கும்.பாத் எப்போதும் சூழலில் இருக்கும்; அனைத்து யுனிக்ஸ் அமைப்புகள்அதை மிக விரைவாக நிறுவவும் (வழக்கமாக முதல் செயல்பாட்டில், உண்மையில்).

உங்கள் பாதை வெவ்வேறு கூறுகளில் கட்டமைக்கப்பட்டிருந்தால், நீங்கள் நகல் உள்ளீடுகளுடன் முடிவடையும். யூனிக்ஸ் கண்டறியும் மூல கோப்பகத்தில் பாதையை எவ்வாறு சேர்ப்பது என்பதைப் பார்க்கவும், கட்டளை என்ன? நகல்களைச் சேர்ப்பதையோ அல்லது அவற்றை அகற்றுவதையோ தவிர்க்க awk கட்டளையைப் பயன்படுத்தி நகல் $PATH உள்ளீடுகளை அகற்றவும்.

எங்கே வைப்பது

~/.bash_rc ஐ எந்த நிரலாலும் படிக்க முடியாது, மேலும் ~/.bashrc என்பது ஊடாடும் பாஷ் நிகழ்வுகளுக்கான உள்ளமைவு கோப்பாகும். சூழல் மாறிகளை நீங்கள் ~/.bashrc இல் வரையறுக்கக்கூடாது. PATH போன்ற சூழல் மாறிகளை வரையறுப்பதற்கான சரியான இடம் ~/.profile (அல்லது ~/.bash_profile உங்களுக்கு பேஷ் அல்லாத ஷெல்கள் தேவையில்லை என்றால்). அவற்றுக்கிடையே என்ன வித்தியாசம் மற்றும் நான் எதைப் பயன்படுத்த வேண்டும் என்பதைப் பார்க்கவும்?

பாஷ் அல்லாத ஷெல்களின் குறிப்புகள்

bash, ksh மற்றும் zsh இல், ஏற்றுமதி என்பது ஒரு சிறப்பு தொடரியல் ஆகும், மேலும் PATH=~/opt/bin:$PATH மற்றும் ஏற்றுமதி PATH=~/opt/bin:$PATH ஆகிய இரண்டும் எல்லாவற்றையும் சரியாகச் செய்கின்றன. டாஷ் போன்ற மற்ற Bourne/POSIX ஷெல்களில் (இது பல கணினிகளில் /bin/sh ஆகும்), ஏற்றுமதி என்பது ஒரு சாதாரண கட்டளையைப் போல பாகுபடுத்தப்படுகிறது, இது இரண்டு வேறுபாடுகளைக் குறிக்கிறது:

  • ~ என்பது ஒரு வார்த்தையின் தொடக்கத்தில் மட்டுமே பாகுபடுத்தப்படுகிறது, பணிகளில் தவிர ("யூனிக்ஸ் மூலம் கண்டறியப்படும் மூல கோப்பகத்திற்கு ஒரு பாதையை எவ்வாறு சேர்ப்பது, என்ன கட்டளை?" என்ற பகுதியைப் பார்க்கவும்).
  • PATH இல் இடைவெளிகள் அல்லது \[* இருந்தால் இரட்டை மேற்கோள்களுக்கு வெளியே $PATH உடைந்து விடும்? ,

எனவே, கோடு போன்ற ஷெல்களில், ஏற்றுமதி PATH=~/opt/bin:$PATH ஐ PATH ஐ எழுத்துச்சரமான ~/opt/bin/: க்கு அமைக்கிறது, அதைத் தொடர்ந்து PATH இன் மதிப்பு முதல் இடம் வரை இருக்கும். PATH=~/opt/bin:$PATH (தெளிவில்லாத அசைன்மென்ட்) க்கு மேற்கோள்கள் தேவையில்லை மற்றும் சரியானதைச் செய்கிறது. நீங்கள் ஏற்றுமதியை போர்ட்டபிள் ஸ்கிரிப்ட்டில் பயன்படுத்த விரும்பினால், எக்ஸ்போர்ட் PATH="$HOME/opt/bin:$PATH" என்று எழுத வேண்டும்.

¹ இது பார்ன் ராக்கெட்டுகளில் உண்மை இல்லை (உண்மையான போர்ன் ஷெல், நவீன POSIX-பாணி குண்டுகள் அல்ல), ஆனால் இந்த நாட்களில் நீங்கள் பழைய குண்டுகளை சந்திக்க வாய்ப்பில்லை.

இது எப்படியும் வேலை செய்யும், ஆனால் அவை அதையே செய்யாது: PATH உறுப்புகள் இடமிருந்து வலமாகச் சரிபார்க்கப்படுகின்றன. முதல் உதாரணத்தில் இயங்கக்கூடிய கோப்புகள்எ.கா. /usr/bin இல் நிறுவப்பட்டவற்றை விட ~/opt/bin முன்னுரிமை பெறும், இது நீங்கள் விரும்புவது அல்லது இல்லாமல் இருக்கலாம்.

குறிப்பாக பாதுகாப்புக் கண்ணோட்டத்தில், முன்பக்கத்தில் பாதைகளைச் சேர்ப்பது ஆபத்தானது, ஏனென்றால் உங்கள் ~/opt/bin க்கு யாராவது எழுதும் அணுகலைப் பெற முடிந்தால், அவர்கள், எடுத்துக்காட்டாக, நீங்கள் "இதற்குப் பதிலாகப் பயன்படுத்தக்கூடிய பிற ls ஐ வைக்கலாம். bin/ls ஐ கவனிக்காமல் இப்போது ssh அல்லது உங்கள் உலாவி அல்லது விருப்பத்தைப் போலவே கற்பனை செய்து பாருங்கள்... (உங்கள் பாதையில் இதையே மூன்று முறை செய்யலாம்.)

கேள்வி 2ல் நான் குழப்பமடைந்துள்ளேன் (தொடர்பற்ற சிக்கலுடன் தொடர்புடையதாக இருந்ததால், கேள்வியிலிருந்து நீக்கப்பட்டது):

என்ன பயனுள்ள முறைவெவ்வேறு வரிகளுக்கு கூடுதல் பாதைகளைச் சேர்க்கிறதா? ஆரம்பத்தில் இது தந்திரம் செய்யக்கூடும் என்று நினைத்தேன்:

ஏற்றுமதி PATH=$PATH:~/opt/bin ஏற்றுமதி PATH=$PATH:~/opt/node/bin

ஆனால் இரண்டாவது அசைன்மென்ட் ~/opt/node/bin ஐ சேர்ப்பது மட்டுமல்லாமல், முன்பு ஒதுக்கப்பட்ட அனைத்து PATH ஐயும் சேர்க்கிறது.

இது சாத்தியமான தீர்வு:

ஏற்றுமதி PATH=$PATH:~/opt/bin:~/opt/node/bin

ஆனால் வாசிப்புத்திறனுக்காக ஒரு பாதைக்கு ஒரு இலக்கை நான் விரும்புகிறேன்.

நீங்கள் சொன்னால்

PATH=~/opt/bin

இது அனைத்து,உங்கள் பாதையில் என்ன இருக்கும். PATH என்பது ஒரு சூழல் மாறி மட்டுமே, நீங்கள் PATH இல் சேர்க்க விரும்பினால், நீங்கள் விரும்பும் உள்ளடக்கத்துடன் மாறியை மீண்டும் உருவாக்க வேண்டும். எனவே கேள்வி 2 இல் நீங்கள் ஒரு உதாரணம் தருவது நீங்கள் சரியாக என்ன செய்ய விரும்புகிறீர்கள், கேள்வியின் புள்ளியை நான் முழுமையாக இழக்கவில்லை என்றால்.

எனது குறியீட்டில் இரண்டு படிவங்களையும் பயன்படுத்துகிறேன். நான் பணிபுரியும் ஒவ்வொரு கம்ப்யூட்டரிலும் நான் நிறுவும் பொதுவான சுயவிவரம் என்னிடம் உள்ளது, அது விடுபட்ட கோப்பகங்களுக்கு இடமளிக்கும் வகையில் இருக்கும்:

ஏற்றுமதி PATH=/opt/bin:/usr/local/bin:/usr/contrib/bin:/bin:/usr/bin:/usr/sbin:/usr/bin/X11 # பிண்டீருக்கான பாதையில் விருப்ப உருப்படிகளைச் சேர்க்கவும் $HOME/local/bin $HOME/bin இல்; [ -d $bindir ] என்றால் செய்யுங்கள்; பின்னர் PATH=$PATH:$(bindir) fi முடிந்தது

$PATH சூழலில் இருந்து இயங்கக்கூடிய தேடல் பாதையை Linux தீர்மானிக்கிறது. $PATH சூழலின் மேல் /data/myscripts கோப்பகத்தைச் சேர்க்க, பின்வருவனவற்றைப் பயன்படுத்தவும்:

PATH=/data/myscripts:$PATH

இந்த கோப்பகத்தை பாதையின் முடிவில் சேர்க்க, பின்வரும் கட்டளையைப் பயன்படுத்தவும்:

பாதை=$PATH:/data/myscripts

ஆனால் முந்தையவை போதாது, ஏனென்றால் ஸ்கிரிப்ட்டின் உள்ளே சூழல் மாறியை அமைக்கும் போது, ​​அந்த மாற்றம் ஸ்கிரிப்ட்டின் உள்ளே மட்டுமே செயல்படும். இந்த வரம்பு இரண்டு வழிகளில் மட்டுமே வரையறுக்கப்பட்டுள்ளது:

  • ஒரு ஸ்கிரிப்ட்டில் சூழல் மாறியை நீங்கள் ஏற்றுமதி செய்தால், ஸ்கிரிப்ட் மூலம் அழைக்கப்படும் எந்த நிரல்களிலும் அது பயனுள்ளதாக இருக்கும். ஸ்கிரிப்ட் எனப்படும் நிரலில் இது பயனுள்ளதாக இல்லை என்பதை நினைவில் கொள்ளவும்.
  • ஸ்கிரிப்ட்டை அழைக்கும் நிரல் அழைப்பதற்குப் பதிலாகச் சேர்ப்பதன் மூலம் அவ்வாறு செய்தால், ஸ்கிரிப்டில் ஏதேனும் சூழல் மாற்றங்கள் அழைப்புத் திட்டத்தில் பயனுள்ளதாக இருக்கும். டாட் கட்டளை அல்லது மூல கட்டளையைப் பயன்படுத்தி இந்தச் சேர்க்கையைச் செய்யலாம்.

$HOME/myscript.sh மூல $HOME/myscript.sh

"அழைப்பு" ஸ்கிரிப்டில் உள்ள "அழைக்கக்கூடிய" ஸ்கிரிப்டை உள்ளடக்கியது. இது #include in C. எனவே இது ஸ்கிரிப்ட் அல்லது அழைப்பு நிரலுக்குள் பயனுள்ளதாக இருக்கும். ஆனால் அழைப்பு நிரல் மூலம் அழைக்கப்படும் எந்த நிரல்கள் அல்லது ஸ்கிரிப்ட்களுக்கும் இது பயனுள்ளதாக இருக்காது. அழைப்புச் சங்கிலி வரை அதைச் செயல்படுத்த, ஏற்றுமதி கட்டளையைப் பயன்படுத்தி சூழல் மாறி அமைப்பைப் பின்பற்ற வேண்டும்.

உதாரணமாக, பாஷ் ஷெல் நிரல் .bash_profile கோப்பின் உள்ளடக்கங்களை உள்ளடக்கியது. எனவே, .bash_profile இல் பின்வரும் 2 வரிகளைச் சேர்த்தல்:

PATH=$PATH:/data/myscripts ஏற்றுமதி PATH

அந்த 2 வரிகளை ஒரு பாஷ் நிரலில் திறம்பட வைக்கிறது. இவ்வாறு, இல் பாஷ் மாறி$PATH இல் $HOME/myscript.sh அடங்கும், மேலும் ஏற்றுமதி அறிக்கையின் காரணமாக, bash மூலம் அழைக்கப்படும் எந்த நிரலும் $PATH ஐ மாற்றியமைக்கும். மேலும் பாஷ் ப்ராம்ப்ட்டில் இருந்து தொடங்கப்படும் எந்த புரோகிராம்களும் பாஷ் மூலம் அழைக்கப்படுவதால், பாஷ் ப்ராம்ட்டில் இருந்து நீங்கள் தொடங்கும் எதற்கும் புதிய பாதை செல்லுபடியாகும்.

இதன் முக்கிய அம்சம் என்னவென்றால், பாதையில் ஒரு புதிய கோப்பகத்தைச் சேர்க்க, ஷெல்லில் சேர்க்கப்பட்டுள்ள ஸ்கிரிப்டில் $PATH சூழல் மாறியில் கோப்பகத்தைச் சேர்க்க வேண்டும் அல்லது சேர்க்க வேண்டும், மேலும் நீங்கள் $PATH சூழல் மாறியை ஏற்றுமதி செய்ய வேண்டும்.

கூடுதல் தகவல்இங்கே

நகல்களைப் பற்றி கவலைப்படாமல் ஒரு பாதையில் கூறுகளைச் சேர்க்க உதவும் pathadd மற்றும் pathrm ஆகிய இரண்டு செயல்பாடுகளை சில காலமாக என்னுடன் வைத்திருந்தேன்.

pathadd ஒரு பாதை வாதத்தையும், விருப்பத்திற்குப் பின் வாதத்தையும் எடுத்துக்கொள்கிறது, அது சேர்க்கப்பட்டால் PATH இல் சேர்க்கப்படும் இல்லையெனில் அது சேர்க்கப்படும்.

ஏறக்குறைய ஒவ்வொரு சூழ்நிலையிலும், நீங்கள் ஒரு பாதையைச் சேர்த்தால், ஏற்கனவே பாதையில் உள்ள அனைத்தையும் நீங்கள் மேலெழுத விரும்பலாம், எனவே நான் இயல்பாகச் சேர்க்க விரும்புகிறேன்.

Pathadd() ( newelement=$(1%/) என்றால் [ -d "$1" ] && ! எதிரொலி $PATH | grep -E -q "(^|:)$newelement($|:)" ; பிறகு [ " $2" = "பின்" ] ; பின்னர் PATH="$PATH:$newelement" வேறு PATH="$newelement:$PATH" 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"ஐ ஏற்றுமதி செய்த பிறகு PATH

ஒரு பாதை ஏற்கனவே இருந்தால் அதைச் சேர்க்க மாட்டீர்கள் என்று உங்களுக்கு உத்தரவாதம் உள்ளது. நீங்கள் இப்போது /baz/bat தொடக்கத்தில் இருக்க விரும்பினால்.

Pathrm "/baz/bat" pathadd "/baz/bat" ஏற்றுமதி PATH

இரட்டிப்பாக்காமல் ஏற்கனவே பாதையில் இருந்தால் எந்தப் பாதையையும் இப்போது முன்னால் கொண்டு வர முடியும்.

மற்ற விநியோகங்களைப் பற்றி என்னால் பேச முடியாது, ஆனால் உபுண்டுவில் ஒரு கோப்பு உள்ளது, /etc/environment, இது அனைத்து பயனர்களுக்கும் நிலையான தேடல் பாதையாகும். எனது கணினியை நான் மட்டுமே பயன்படுத்துவதால், ஸ்கிரிப்ட்டில் நான் சேர்க்கும் தற்காலிக சேர்க்கையாக இருக்கும் வரை, நான் விரும்பும் கோப்பகங்களை எனது பாதையில் வைக்கிறேன்.

இதோ எனது தீர்வு:

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

பின்னே விட்டுச் செல்லாத நல்ல லைட் லைனர்:

எனக்கு (Mac OS X 10.9.5 இல்) /etc/paths கோப்பில் பாதை பெயரை (எ.கா. /mypathname) சேர்ப்பது நன்றாக வேலை செய்தது.

திருத்துவதற்கு முன், எதிரொலி $PATH திரும்பப் பெறப்பட்டது:

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

/etc/paths ஐ எடிட் செய்து ஷெல்லை மறுதொடக்கம் செய்த பிறகு, $PATH மாறி /pathname உடன் சேர்க்கப்படும். உண்மையில், எதிரொலி $PATH வருமானம்:

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

என்ன நடந்தது என்றால் $PATH இல் /mypathname சேர்க்கப்பட்டது.

PATH சூழலுக்கு புதிய பாதையைச் சேர்க்க PATH:

ஏற்றுமதி பாதை=$PATH:/new-path/

நீங்கள் திறக்கும் ஒவ்வொரு ஷெல்லுக்கும் இந்த மாற்றத்தைப் பயன்படுத்த, நீங்கள் அழைக்கும் போது ஷெல் அழைக்கும் கோப்பில் அதைச் சேர்க்கவும். வெவ்வேறு ஷெல்களில் இது இருக்கலாம்:

  • பாஷ் ஷெல்: ~/.bash_profile, ~/.bashrc அல்லது சுயவிவரம்
  • கார்ன் ஷெல்: ~/.kshrc அல்லது .profile
  • Z ஷெல்: ~/.zshrc அல்லது .zprofile

உதாரணத்திற்கு

# ஏற்றுமதி PATH=$PATH:/root/learning/bin/ # source ~/.bashrc # எதிரொலி $PATH

மேலே உள்ள வெளியீட்டில் வழங்கப்பட்ட பாதையை நீங்கள் பார்க்கலாம்.

லினக்ஸில் உள்ள அனைத்து கோப்புகளும் கோப்பு அமைப்பில் ஒரு குறிப்பிட்ட முகவரியைக் கொண்டுள்ளன, அவற்றை ஒரு கோப்பு மேலாளர் அல்லது கன்சோல் பயன்பாடுகளைப் பயன்படுத்தி அணுகலாம். இது மிகவும் எளிமையான தலைப்பு, ஆனால் பல தொடக்கநிலையாளர்கள் இதில் சிரமப்படுகிறார்கள்.

இன்றைய சிறு கட்டுரையில் லினக்ஸ் கோப்பிற்கான பாதை என்ன, அது என்னவாக இருக்கும், அதை எவ்வாறு சரியாக எழுதுவது மற்றும் பலவற்றைப் பார்ப்போம். இதற்கு முன்பு உங்களுக்கு சிரமங்கள் இருந்தால், கட்டுரையைப் படித்த பிறகு எல்லாம் முற்றிலும் தெளிவாகிவிடும்.

லினக்ஸில் கோப்பு பாதைகள்

லினக்ஸ் கோப்பு முறைமை விண்டோஸிலிருந்து மிகவும் வேறுபட்டது. அதன் கட்டமைப்பை நாங்கள் கருத்தில் கொள்ள மாட்டோம்; அது முன்பு செய்யப்பட்டது. கோப்புகளுடன் வேலை செய்வதில் கவனம் செலுத்துவோம்.

மிக முக்கியமான வேறுபாடு என்னவென்றால், கோப்பு முகவரியானது டிரைவிலிருந்து தொடங்குவதில்லை, எடுத்துக்காட்டாக, சி:\ அல்லது டி:\ விண்டோஸில் நடப்பது போல, ஆனால் ரூட்டிலிருந்து, மற்ற அனைத்தும் இணைக்கப்பட்டுள்ள ரூட் சிஸ்டம் கோப்பகமாகும். அவரது முகவரி - /. இங்கே நாம் முகவரிகளைப் பற்றி பேச வேண்டும். முகவரியில் உள்ள கோப்பகங்களை பிரிக்க லினக்ஸ் கோப்பு பாதைகள் முன்னோக்கி சாய்வு "/" ஐப் பயன்படுத்துகின்றன, மேலும் இது நீங்கள் Windows - \ இல் பார்ப்பதில் இருந்து வேறுபட்டது.

உதாரணமாக, உள்ளே இருந்தால் விண்டோஸ் நிரம்பியதுடெஸ்க்டாப்பில் உள்ள கோப்பிற்கான பாதை C:\Users\Sergiy\Desktop\ போன்று இருந்தது, பின்னர் Linux இல் கோப்பு பாதை வெறுமனே /home/sergiy/desktop/ ஆக இருக்கும். இதன் மூலம், இதுவரை எல்லாம் எளிமையாகவும் தெளிவாகவும் உள்ளது. ஆனால் பிரச்சினைகள் மேலும் எழுகின்றன.

லினக்ஸ் இயக்க முறைமையில், பல வகையான கோப்பு பாதைகள் இருக்கலாம். லினக்ஸில் என்ன பாதைகள் உள்ளன என்பதைப் பார்ப்போம்:

  • கோப்பு முறைமை ரூட்டிலிருந்து முழு, முழுமையான லினக்ஸ் பாதை- மேலே உள்ள எடுத்துக்காட்டில் இந்த பாதையை நீங்கள் ஏற்கனவே பார்த்திருக்கிறீர்கள், இது "/" மூலத்திலிருந்து தொடங்கி கோப்பிற்கான முழு பாதையையும் விவரிக்கிறது;
  • லினக்ஸ் தொடர்புடைய பாதை- இது தற்போதைய கோப்புறையுடன் தொடர்புடைய கோப்பிற்கான பாதை; இத்தகைய பாதைகள் பெரும்பாலும் குழப்பத்தை ஏற்படுத்துகின்றன.
  • தற்போதைய பயனரின் முகப்பு கோப்புறையுடன் தொடர்புடைய பாதை.- கோப்பு முறைமையில் பாதை, ஆனால் ரூட்டிலிருந்து அல்ல, ஆனால் தற்போதைய பயனரின் கோப்புறையிலிருந்து.

லினக்ஸில் இந்த பாதைகள் எப்படி இருக்கும் என்பதை இப்போது கூர்ந்து கவனிப்போம், மேலும் அதை முழுமையாக தெளிவுபடுத்த சில எடுத்துக்காட்டுகளையும் பார்க்கலாம். ஆர்ப்பாட்டத்திற்கு, கோப்பகங்களின் உள்ளடக்கங்களைக் காண வடிவமைக்கப்பட்ட ls பயன்பாட்டைப் பயன்படுத்துவோம்.

எடுத்துக்காட்டாக, எங்கள் முகப்பு கோப்புறையில் இது போன்ற ஒரு கோப்பகம் உள்ளது, அதில் நான்கு கோப்புகள் உள்ளன:

கோப்புகளில் ஒன்றின் முழு லினக்ஸ் பாதையும் இப்படித்தான் இருக்கும்:

ls /home/sergiy/tmp/file1

இது ஏற்கனவே தொடர்புடைய லினக்ஸ் பாதையாகும், இது முகப்பு கோப்புறையிலிருந்து தொடங்குகிறது, இது ~/ என குறிப்பிடப்படுகிறது. குறிப்பு, ~ அல்ல, அதாவது ~/. பின்னர் நீங்கள் துணை கோப்புறைகளை குறிப்பிடலாம், எங்கள் விஷயத்தில் tmp:

சரி, அல்லது லினக்ஸில் உள்ள கோப்பு பாதை, தற்போதைய கோப்புறையுடன் தொடர்புடையது:

முதல் இணைப்பு தற்போதைய கோப்புறையை (.), இரண்டாவது (..) அதிக கோப்புறையை சுட்டிக்காட்டுகிறது. இது பட்டியல் வழிசெலுத்தலுக்கான இன்னும் பெரிய வாய்ப்புகளைத் திறக்கிறது. எடுத்துக்காட்டாக, தற்போதைய கோப்புறையில் உள்ள கோப்பைப் பார்க்க, பின்வரும் கட்டமைப்பைப் பயன்படுத்தலாம்:

கோப்பின் உள்ளடக்கத்தைப் பார்க்கும்போது இது எந்தப் பயனும் இல்லை. ஆனால் நிரலை செயல்படுத்தும் போது இது மிகவும் முக்கியமானது. ஏனெனில் நிரல் முதலில் PATH சூழலில் தேடப்படும், பின்னர் இந்த கோப்புறையில் மட்டுமே. எனவே, தற்போதைய கோப்புறையில் உள்ள ஒரு நிரலை நீங்கள் இயக்க வேண்டும் மற்றும் அது /பின் கோப்பகத்தில் உள்ளதைப் போலவே அழைக்கப்பட்டால், வெளிப்படையான இணைப்பு இல்லாமல் தற்போதைய கோப்புறையில் கோப்பைத் தேட வேண்டும், எதுவும் வேலை செய்யாது.

நிரல்களை தொகுக்கும்போது இத்தகைய கட்டுமானங்கள் அடிக்கடி நிகழலாம். இந்த சின்னங்கள் மற்றும் லினக்ஸ் கோப்பு பாதைகளை டெர்மினலில் மட்டுமின்றி, எதிலும் பயன்படுத்தலாம் கோப்பு மேலாளர், இது மிகவும் வசதியாக இருக்கும்.

ஆனாலும் லினக்ஸ் டெர்மினல்இன்னும் பெரிய வாய்ப்புகளை வழங்குகிறது. கோப்பு அல்லது அடைவு முகவரிகளில் நேரடியாக எளிய வைல்டு கார்டு எழுத்துகளைப் பயன்படுத்தலாம். எடுத்துக்காட்டாக, f இல் தொடங்கும் அனைத்து கோப்புகளையும் பட்டியலிடலாம்:

அல்லது நீங்கள் tmp கோப்புறையில் மட்டுமல்ல, உங்கள் முகப்பு கோப்புறையின் எந்த துணை கோப்புறையிலும் தேடலாம்:

இவை அனைத்தும் வேலை செய்யும், ஒருவேளை இது எப்போதும் அவசியமில்லை மற்றும் நடைமுறைக்குரியது அல்ல. ஆனால் சில சூழ்நிலைகளில் இது நிறைய உதவும். இந்த செயல்பாடுகள் பாஷ் ஷெல் மட்டத்தில் செயல்படுத்தப்படுகின்றன, எனவே நீங்கள் அவற்றை எந்த கட்டளையிலும் பயன்படுத்தலாம். ஷெல் எத்தனை கோப்புகள் கண்டுபிடிக்கப்பட்டன என்பதைப் பார்க்கிறது மற்றும் அவை ஒவ்வொன்றிற்கும் ஒரு கட்டளையை அழைக்கிறது.

முடிவுரை

அவ்வளவுதான். பாதையை சரியாக எழுதுவது மட்டுமல்லாமல் உங்களுக்கு தேவையான அனைத்தையும் இப்போது நீங்கள் அறிவீர்கள் linux கோப்பு, ஆனால் கோப்புகளைத் தேடுவது அல்லது cd கட்டளையைப் பயன்படுத்தி கோப்பகங்கள் வழியாகச் செல்வது போன்ற மிகவும் சிக்கலான செயல்களைச் செய்யவும். உங்களிடம் ஏதேனும் கேள்விகள் இருந்தால், கருத்துகளில் கேளுங்கள்!

தொடர்புடைய இடுகைகள்:


PATH சூழல் மாறியில் புதிய பாதை எங்கு சேர்க்கப்பட வேண்டும் என்று யோசித்துக்கொண்டிருக்கிறேன். .bashrc ஐ எடிட் செய்வதன் மூலம் இதைச் செய்யலாம் என்று எனக்குத் தெரியும் (உதாரணமாக), ஆனால் இதை எப்படி செய்வது என்பது தெளிவாகத் தெரியவில்லை.

இதனால்:

ஏற்றுமதி PATH=~/opt/bin:$PATH

ஏற்றுமதி PATH=$PATH:~/opt/bin

11 பதில்கள்

எளிய பொருள்

பாதை=$PATH:~/opt/bin PATH=~/opt/bin:$PATH

நீங்கள் ~/opt/bin குறியீட்டை இறுதியில் சேர்க்க விரும்புகிறீர்களா என்பதைப் பொறுத்து (பல கோப்பகங்களில் ஒரே பெயரில் நிரல் இருந்தால் மற்ற எல்லா கோப்பகங்களையும் தேட) அல்லது தொடக்கத்தில் (மற்ற எல்லா கோப்பகங்களுக்கும் முன் தேட).

நீங்கள் ஒரே நேரத்தில் பல உள்ளீடுகளைச் சேர்க்கலாம். PATH=$PATH:~/opt/bin:~/opt/node/bin அல்லது வரிசைப்படுத்தும் மாற்றங்கள் நன்றாக உள்ளன.

மாறி ஏற்கனவே சூழலில் இருந்தால் நீங்கள் ஏற்றுமதி செய்ய வேண்டியதில்லை: மாறியின் மதிப்பில் ஏற்படும் எந்த மாற்றமும் சுற்றுச்சூழலில் பிரதிபலிக்கும்.¹ PATH எப்போதும் சூழலில் இருக்கும்; அனைத்து யூனிக்ஸ் அமைப்புகளும் இதை மிக விரைவாக நிறுவுகின்றன (பொதுவாக முதல் செயல்பாட்டில், உண்மையில்).

உங்கள் PATH பல்வேறு கூறுகளால் உருவாக்கப்பட்டால், நீங்கள் நகல் உள்ளீடுகளுடன் முடிவடையும். யூனிக்ஸ் மூலம் கண்டறியப்படும் உங்கள் ஹோம் டைரக்டரியில் ஒரு பாதையை எவ்வாறு சேர்ப்பது என்பதைப் பார்க்கவும், எந்த கட்டளை? மற்றும் நகல்களைத் தவிர்க்க அல்லது அவற்றை அகற்ற awk கட்டளையைப் பயன்படுத்தி நகல் $PATH உள்ளீடுகளை அகற்றவும்.

எங்கே வைப்பது

~/.bash_rc ஐ எந்த நிரலாலும் படிக்க முடியாது, மேலும் ~/.bashrc என்பது ஊடாடும் பாஷ் நிகழ்வுகளுக்கான உள்ளமைவு கோப்பாகும். சூழல் மாறிகளை நீங்கள் ~/.bashrc இல் வரையறுக்கக்கூடாது. PATH போன்ற சூழல் மாறிகளை வரையறுப்பதற்கான சரியான இடம் ~/.profile (அல்லது ~/.bash_profile, நீங்கள் பாஷ் அல்லாத ஷெல்களை விரும்பவில்லை என்றால்). அவற்றுக்கிடையே என்ன வித்தியாசம் மற்றும் நான் எதைப் பயன்படுத்த வேண்டும் என்பதைப் பார்க்கவும்?

பாஷ் அல்லாத ஷெல்களின் குறிப்புகள்

bash, ksh மற்றும் zsh இல், ஏற்றுமதி என்பது ஒரு சிறப்பு தொடரியல் ஆகும், மேலும் PATH=~/opt/bin:$PATH மற்றும் export PATH=~/opt/bin:$PATH ஆகிய இரண்டும் சரியானதைச் செய்கின்றன. மற்ற Bourne/POSIX ஷெல்களில், அதாவது டாஷ் (இது பல கணினிகளில் /bin/sh ஆகும்), ஏற்றுமதி என்பது ஒரு சாதாரண கட்டளையைப் போல பாகுபடுத்தப்படுகிறது, இது இரண்டு வேறுபாடுகளைக் குறிக்கிறது:

  • ~ என்பது ஒரு வார்த்தையின் தொடக்கத்தில் மட்டுமே பாகுபடுத்தப்படுகிறது, பணிகளில் தவிர (கட்டளை தேவைப்படும் யூனிக்ஸ் மூலம் கண்டறியப்படும் முகப்பு அடைவு பாதையை எவ்வாறு சேர்ப்பது என்பதைப் பார்க்கவும்? ;
  • $PATH வெளி இரட்டை மேற்கோள்கள் PATH இல் இடைவெளிகள் இருந்தால் அல்லது \[*? .

எனவே, கோடு போன்ற ஷெல்களில், ஏற்றுமதி PATH=~/opt/bin:$PATH ஐ PATH ஐ எழுத்துச்சரமான ~/opt/bin/: க்கு அமைக்கிறது, அதைத் தொடர்ந்து PATH மதிப்பு முதல் இடம் வரை இருக்கும். PATH=~/opt/bin:$PATH (எளிய ஒதுக்கீடு) க்கு மேற்கோள்கள் தேவையில்லை மற்றும் எல்லாவற்றையும் சரியாகச் செய்கிறது. நீங்கள் ஏற்றுமதியை போர்ட்டபிள் ஸ்கிரிப்ட்டில் பயன்படுத்த விரும்பினால், ஏற்றுமதி PATH="$HOME/opt/bin:$PATH" அல்லது PATH=~/opt/bin:$PATH ஏற்றுமதி PATH (அல்லது PATH=$HOME/opt) என்று எழுத வேண்டும். /பின்: $PATH ஏற்றுமதி PATH ஆனது போர்ன் ஷெல்லிற்கு கூட பெயர்வுத்திறனுக்காக, ஏற்றுமதி var=மதிப்பை ஏற்காது மற்றும் டில்டே விரிவாக்கம் செய்யவில்லை).

¹ இது Bourne ஷெல்களில் உண்மை இல்லை (உண்மையான Bourne ஷெல், நவீன POSIX-பாணி குண்டுகள் அல்ல), ஆனால் இந்த நாட்களில் நீங்கள் பழைய குண்டுகளை சந்திக்க வாய்ப்பில்லை. துணை>

எந்த வகையிலும் செயல்படும், ஆனால் அவை ஒரே செயலைச் செய்யாது: PATH உறுப்புகள் இடமிருந்து வலமாகச் சரிபார்க்கப்படுகின்றன. முதல் எடுத்துக்காட்டில், ~/opt/bin இல் உள்ள எக்ஸிகியூட்டபிள்கள் நிறுவப்பட்டவற்றை விட முன்னுரிமை பெறும், எடுத்துக்காட்டாக, /usr/bin , நீங்கள் விரும்புவது அல்லது இல்லாமல் இருக்கலாம்.

குறிப்பாக, பாதுகாப்புக் கண்ணோட்டத்தில் முன்புறத்தில் பாதைகளைச் சேர்ப்பது ஆபத்தானது, ஏனென்றால் உங்கள் ~/opt/bin க்கு யாராவது எழுதும் அணுகலைப் பெற்றால், அவர்கள் வேறு ls ஐ வைக்கலாம், அதற்கு பதிலாக நீங்கள் /bin/ls ஐப் பயன்படுத்தலாம். கவனிக்காமல். இப்போது ssh அல்லது உங்கள் உலாவி அல்லது விருப்பத்திற்கு இதையே கற்பனை செய்து பாருங்கள்... (அதே விஷயத்தை உங்கள் பாதையில் மூன்று முறை வைக்கவும்.)

கேள்வி 2 ஐப் பற்றி நான் குழப்பமடைகிறேன் தொடர்புடைய பிரச்சனை):

வெவ்வேறு வரிகளுக்கு கூடுதல் பாதைகளைச் சேர்ப்பதற்கான திறமையான வழி என்ன? ஆரம்பத்தில் இது தந்திரம் செய்யக்கூடும் என்று நினைத்தேன்:

ஏற்றுமதி PATH=$PATH:~/opt/bin ஏற்றுமதி PATH=$PATH:~/opt/node/bin

ஆனால் இரண்டாவது அசைன்மென்ட் ~/opt/node/bin ஐ சேர்ப்பது மட்டுமல்லாமல், முன்பு ஒதுக்கப்பட்ட PATH ஐயும் சேர்ப்பதால் அல்ல.

இது ஒரு சாத்தியமான தீர்வு:

ஏற்றுமதி PATH=$PATH:~/opt/bin:~/opt/node/bin

ஆனால் வாசிப்புத்திறனுக்காக நான் ஒரு பாதைக்கு ஒரு இலக்கை விரும்புகிறேன்.

நீங்கள் சொன்னால்

PATH=~/opt/bin

இது அனைத்து, இது உங்கள் பாதையில் இருக்கும். PATH என்பது ஒரு சூழல் மாறி மட்டுமே, நீங்கள் PATH இல் சேர்க்க விரும்பினால், நீங்கள் விரும்பும் உள்ளடக்கத்துடன் மாறியை மீண்டும் உருவாக்க வேண்டும். அதாவது, கேள்வி 2 இல் நீங்கள் ஒரு உதாரணம் கொடுக்கிறீர்களோ, அதையே நீங்கள் செய்ய விரும்புகிறீர்கள்.

எனது குறியீட்டில் இரண்டு படிவங்களையும் பயன்படுத்துகிறேன். விடுபட்ட கோப்பகங்களை ஹோஸ்ட் செய்ய, நான் பணிபுரியும் ஒவ்வொரு கணினியிலும் நான் நிறுவும் பொதுவான சுயவிவரம் உள்ளது:

ஏற்றுமதி PATH=/opt/bin:/usr/local/bin:/usr/contrib/bin:/bin:/usr/bin:/usr/sbin:/usr/bin/X11 # பிண்டீருக்கான பாதையில் விருப்ப உருப்படிகளைச் சேர்க்கவும் $HOME/local/bin $HOME/bin இல்; [ -d $bindir ] என்றால் செய்யுங்கள்; பின்னர் PATH=$PATH:$(bindir) fi முடிந்தது

$PATH சூழல் மாறி மூலம் இயங்கக்கூடிய தேடல் பாதையை Linux வரையறுக்கிறது. $PATH சூழல் மாறியின் தொடக்கத்தில் /data/myscripts கோப்பகத்தைச் சேர்க்க, பின்வருவனவற்றைப் பயன்படுத்தவும்:

PATH=/data/myscripts:$PATH

இந்த கோப்பகத்தை பாதையின் முடிவில் சேர்க்க, பின்வரும் கட்டளையைப் பயன்படுத்தவும்:

பாதை=$PATH:/data/myscripts

ஆனால் முந்தையவை போதாது, ஏனென்றால் ஸ்கிரிப்ட்டின் உள்ளே சூழல் மாறியை அமைக்கும் போது, ​​அந்த மாற்றம் ஸ்கிரிப்ட்டின் உள்ளே மட்டுமே செயல்படும். இந்த வரம்பு இரண்டு வழிகளில் வரையறுக்கப்பட்டுள்ளது:

  • ஒரு ஸ்கிரிப்ட்டில் சூழல் மாறியை நீங்கள் ஏற்றுமதி செய்தால், அது ஸ்கிரிப்ட் மூலம் அழைக்கப்படும் எந்த நிரல்களிலும் பயனுள்ளதாக இருக்கும். ஸ்கிரிப்ட் என்று அழைக்கப்படும் நிரலில் இது பயனுள்ளதாக இல்லை என்பதை நினைவில் கொள்க.
  • ஸ்கிரிப்ட்டை அழைக்கும் நிரல் அழைப்பதற்குப் பதிலாகச் சேர்ப்பதன் மூலம் அவ்வாறு செய்தால், ஸ்கிரிப்டில் ஏதேனும் சூழல் மாற்றங்கள் அழைப்புத் திட்டத்தில் பயனுள்ளதாக இருக்கும். டாட் கட்டளை அல்லது மூல கட்டளையைப் பயன்படுத்தி இந்தச் சேர்க்கையைச் செய்யலாம்.

$HOME/myscript.sh மூல $HOME/myscript.sh

"அழைப்பு" ஸ்கிரிப்டில் உள்ள "அழைக்கக்கூடிய" ஸ்கிரிப்டை உள்ளடக்கியது. இது #include in C. எனவே இது ஸ்கிரிப்ட் அல்லது அழைப்பு நிரலுக்குள் பயனுள்ளதாக இருக்கும். ஆனால் அழைப்பு நிரல் மூலம் அழைக்கப்படும் எந்த நிரல்கள் அல்லது ஸ்கிரிப்ட்களுக்கும் இது பயனுள்ளதாக இருக்காது. அழைப்புச் சங்கிலி வரை அதைச் செயல்படுத்த, ஏற்றுமதி கட்டளையைப் பயன்படுத்தி சூழல் மாறி அமைப்பைப் பின்பற்ற வேண்டும்.

உதாரணமாக, பாஷ் ஷெல் நிரல் .bash_profile கோப்பின் உள்ளடக்கங்களை உள்ளடக்கியது. எனவே பின்வரும் 2 வரிகளை .bash_profile இல் வைக்கவும்:

PATH=$PATH:/data/myscripts ஏற்றுமதி PATH

அந்த 2 வரிகளை ஒரு பாஷ் நிரலில் திறம்பட வைக்கிறது. எனவே பாஷில், $PATH மாறி $HOME/myscript.sh ஐ உள்ளடக்கியது, மேலும் ஏற்றுமதி அறிக்கையின் காரணமாக, bash மூலம் அழைக்கப்படும் எந்த நிரலும் $PATH மாறியை மாற்றியமைக்கும். மேலும் பாஷ் வரியில் இருந்து நீங்கள் தொடங்கும் எந்த புரோகிராம்களும் பாஷ் என அழைக்கப்படுவதால், புதிய பாதையானது பாஷ் ப்ராம்ட்டில் இருந்து நீங்கள் தொடங்கும் எதற்கும் பொருந்தும்.

இதன் முக்கிய அம்சம் என்னவென்றால், பாதையில் ஒரு புதிய கோப்பகத்தைச் சேர்க்க, ஷெல்லில் சேர்க்கப்பட்டுள்ள ஸ்கிரிப்டில் $PATH சூழல் மாறியில் கோப்பகத்தைச் சேர்க்க வேண்டும் அல்லது சேர்க்க வேண்டும், மேலும் நீங்கள் $PATH சூழல் மாறியை ஏற்றுமதி செய்ய வேண்டும்.

நகல்களைப் பற்றி கவலைப்படாமல் ஒரு பாதையில் கூறுகளைச் சேர்க்க உதவும் pathadd மற்றும் pathrm ஆகிய இரண்டு செயல்பாடுகளை நான் சில காலமாக என்னுடன் வைத்திருந்தேன்.

pathadd ஒரு பாதை வாதத்தையும், வாதத்திற்குப் பின் ஒரு விருப்பத்தையும் எடுக்கும், இது சேர்க்கப்பட்டால் PATH இல் சேர்க்கப்படும், இல்லையெனில் அது சேர்க்கும்.

எந்தவொரு சூழ்நிலையிலும், நீங்கள் ஒரு பாதையைச் சேர்க்கிறீர்கள் என்றால், ஏற்கனவே பாதையில் உள்ள எதையும் நீங்கள் மேலெழுத விரும்பலாம், எனவே நான் இயல்பாகச் சேர்க்க விரும்புகிறேன்.

Pathadd() ( newelement=$(1%/) என்றால் [ -d "$1" ] && ! எதிரொலி $PATH | grep -E -q "(^|:)$newelement($|:)" ; பிறகு [ " $2" = "பின்" ] ; பின்னர் PATH="$PATH:$newelement" வேறு PATH="$newelement:$PATH" 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"ஐ ஏற்றுமதி செய்த பிறகு PATH

பாதை ஏற்கனவே இருந்தால் அதைச் சேர்க்க மாட்டீர்கள் என்று உங்களுக்கு உத்தரவாதம் உண்டு. நீங்கள் விரும்பினால் /baz/bat முதலில் இயக்கப்பட வேண்டும்.

Pathrm "/baz/bat" pathadd "/baz/bat" ஏற்றுமதி PATH

இரட்டிப்பாக்காமல் ஏற்கனவே பாதையில் இருந்தால் எந்தப் பாதையையும் இப்போது முன்பக்கமாக நகர்த்தலாம்.

குண்டு துளைக்காத சேர்த்தல்/முன் தயாரிப்பு முறை

சேர்ப்பதற்கும் சேர்ப்பதற்கும் தேர்வு செய்வதில் பல பரிசீலனைகள் உள்ளன. அவற்றில் பல பிற பதில்களில் உள்ளன, எனவே அவற்றை மீண்டும் இங்கு கூறமாட்டேன்.

முக்கியமான விஷயம் என்னவென்றால், கணினி ஸ்கிரிப்டுகள் இதைப் பயன்படுத்தாவிட்டாலும் (ஏன் என்று எனக்கு ஆச்சரியமாக இருக்கிறது) *1, PATH சூழல் மாறியில் ஒரு பாதையைச் சேர்ப்பதற்கான ஒரு குண்டு துளைக்காத வழி (எ.கா. $HOME/bin)

பாதை="$(பாதை:+$(பாத்):)$வீடு/பின்"

சேர்க்க (PATH="$PATH:$HOME/bin"க்கு பதிலாக) மற்றும்

பாதை="$வீடு/பின்$(பாதை:+:$(பாத்))"

சேர்க்க (PATH="$HOME/bin:$PATH"க்கு பதிலாக)

$PATH தொடக்கத்தில் காலியாக இருக்கும் போது இது தவறான முன்னணி/பின்னால் வரும் பெருங்குடலைத் தவிர்க்கிறது, இது தேவையற்ற பக்க விளைவுகளை ஏற்படுத்தலாம் மற்றும் கண்டுபிடிப்பதற்கு ஒரு கனவாக இருக்கலாம் (இந்த பதில் சுருக்கமாக awk-way கேஸைக் குறிக்கிறது).

$(அளவுரு:+சொல்)

அளவுரு பூஜ்யமாக இருந்தால் அல்லது அமைக்கப்படவில்லை என்றால், எதுவும் மாற்றப்படாது, இல்லையெனில் அது மாற்றப்படும் வார்த்தை வார்த்தை.

எனவே $(PATH:+$(PATH):) இதற்கு விரிவடைகிறது: 1) PATH பூஜ்யமாக இருந்தால் அல்லது அமைக்கப்படாமல் இருந்தால் எதுவும் இல்லை, 2) $(PATH): PATH அமைக்கப்பட்டால்.

குறிப்பு. இது பாஷுக்கானது.

*1 devtoolset-6/enable போன்ற ஸ்கிரிப்ட்கள் இதைப் பயன்படுத்துகின்றன, $ cat /opt/rh/devtoolset-6/enable # பொது சூழல் மாறிகள் ஏற்றுமதி PATH=/opt/rh/devtoolset-6/root/usr /bin $(பாதை:+:$(பாதை)) ...

மற்ற விநியோகங்களைப் பற்றி என்னால் பேச முடியாது, ஆனால் உபுண்டுவில் ஒரு கோப்பு உள்ளது, /etc/environment, இது எல்லா பயனர்களுக்கும் இயல்புநிலை தேடல் பாதையாகும். எனது கணினியை நான் மட்டுமே பயன்படுத்துவதால், ஸ்கிரிப்ட்டில் நான் சேர்க்கும் தற்காலிக சேர்க்கையாக இல்லாவிட்டால், எனது பாதையில் நான் விரும்பும் கோப்பகங்களை அங்கு வைக்கிறேன்.

எனக்கு (Mac OS X 10.9.5 இல்) /etc/paths கோப்பில் பாதை பெயரை (எ.கா. /mypathname) சேர்ப்பது நன்றாக வேலை செய்தது.

திருத்துவதற்கு முன், எதிரொலி $PATH திரும்பப் பெறப்பட்டது:

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

/etc/paths ஐ எடிட் செய்து ஷெல்லை மறுதொடக்கம் செய்த பிறகு, $PATH மாறி /pathname உடன் சேர்க்கப்படும். உண்மையில், எதிரொலி $PATH வருமானம்:

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

என்ன நடந்தது என்றால் $PATH மாறியில் /mypathname சேர்க்கப்பட்டது.