Wat is PATH op een Mac OS?

Wat is de PATH in een Mac OS? Ik heb het gebruikt om algemene opdrachtregelprogrammas te installeren, maar de enige documentatie die ik heb gevonden zijn tutorials om precies dat te doen, zonder echte uitleg van wat er gebeurt onder de motorkap. Ik heb ook “geen relevante pagina gevonden op Wikipedia .

Dus wat is het doel van PATH en wat is het verschil tussen /etc/paths en ~/.bash_profile **?

Bijvoorbeeld in mijn paths bestand, zie ik dit:

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

Maar in mijn ~/.bash_profile Zie ik dit:

# Setting PATH for Python 2.7 # The orginal version is saved in .bash_profile.pysave PATH="/Library/Frameworks/Python.framework/Versions/2.7/bin:${PATH}" export PATH 

Is dit slechts een gebruikersspecifieke toevoeging aan het paths -bestand? “Zitten al die dingen in paths, zoals /usr/bin?

Reacties

  • Gelieve ‘ niet te combineren met meerdere vragen in één bericht. Elk van uw vragen zou hier afzonderlijk welkom zijn, maar niet allemaal samen op deze manier. Verkort dit alstublieft tot een enkele vraag, u zou 1 en 2 kunnen combineren, maar de andere hebben niets specifiek met PATH te maken. 3 wordt hier beantwoord 4 wordt hier uitgelegd en 5 slaat niet veel op I ‘ m bang. Evenmin stelt uw bonusvraag, welke bestanden zijn binair? Scripts zijn dat niet.
  • Ik heb mijn vraag aangepast. Ik vond die links ook nuttig. Bedankt.

Antwoord

1. Wat is het doel van PATH?

PATH is een omgevingsvariabele die een door dubbele punten gescheiden lijst van mappen bevat waarin uw shell op de opdrachtregel naar uitvoerbare bestanden zoekt die u een naam geeft zonder een expliciet pad ernaar toe (zoals in uw jsdoc voorbeeld). Dus als uw PATH

/usr/bin:/bin:/home/bin 

heeft, dan zal in deze mappen naar elk uitvoerbaar bestand dat u op naam roept worden gezocht (in die volgorde) en het eerste gevonden uitvoerbare bestand is het uitvoerbare bestand.

2. Wat is het verschil tussen / etc / path en ~ / .bash_profile

Volgens deze vraag over ServerFault , /etc/paths wordt gebruikt om PATH globaal in te stellen (dwz systeembreed, voor alle gebruikers) terwijl ~/.bash_profile wordt gebruikt om voorkeuren per gebruiker in te stellen (waarbij ~ de basismap van de gebruiker is). Wat staat er in .bash_profile kan toevoegen aan de globale PATH van /etc/paths of deze volledig negeren.

Voor het record, /etc/paths lijkt een eigenaardigheid van MAC OS te zijn: ik ben het tenminste “niet tegengekomen op GNU / Linux.

Reacties

  • Ik heb ze zojuist bewerkt, maar bedankt dat je ze allemaal beantwoord hebt!
  • @ggundersen Ik heb mijn antwoord bijgesneden zodat het past bij je bewerkte vraag.
  • @ggundersen wil je misschien ook mijn antwoord en th e links daarin over /etc/paths op OSX.

Antwoord

Wat is het doel van PATH?

Het is hoe uw shell vindt programmas. Wanneer u bijvoorbeeld ls typt, wordt een programma uitgevoerd met de naam ls dat in /bin op de meeste systemen, inclusief Mac OS X. Je shell kan dat alleen vinden omdat /bin in de PATH staat.

De shell zoekt naar programmas in PATH volgorde, van links naar rechts. Als er twee ls programmas op uw systeem zijn, en hun mappen bevinden zich beide in uw PATH, dan vindt het degene in de vermelde map eerste in uw PATH.

Wat is het verschil tussen / etc / paden en ~ / .bash_profile

Paden die zijn ingesteld in /etc/paths worden toegevoegd aan de PATH op opstarten in alle shells op Mac OS X.

~/.bash_profile is slechts een van de verschillende shell-scripts die door Bash worden uitgevoerd bij het opstarten, en een aantal hiervan zijn Bash-specifiek. Daarom, als je je shell — verandert, levert Mac OS X ook tcsh en zsh, bijvoorbeeld — wijzigingen aangebracht in /etc/bashrc zijn niet van toepassing op uw nieuwe shell.

Ook is /etc/paths een configuratiebestand op systeemniveau, terwijl ~/.bash_profile per gebruiker is. Als u meerdere interactieve gebruikers op uw Mac had ingesteld, zou u “geen mappen willen toevoegen aan /etc/paths die u niet in ieders . Hetzelfde geldt voor /etc/bashrc, behalve dat dit natuurlijk alleen van toepassing is op gebruikers die Bash als shell gebruiken.

Wat is het verschil tussen PATH en $ PATH en $ {PATH}?

Meestal zie je alleen de variabele zonder de sigil wanneer u de variabele instelt. FOO=bar stelt de FOO omgevingsvariabele in op de string bar. Als je set typt, toont de shell je alle omgevingsvariabelen, en in dat geval zie je ook de variabele zonder enige sigil.

$PATH en ${PATH} zijn meestal uitwisselbaar. Ze vertellen de shell om de huidige PATH variabele “uit te vouwen. s waarde op zijn plaats. Het verschil heeft te maken met hoe en waar u ze gebruikt. Bijvoorbeeld:

$ FOO=bar $ echo $FOO bar $ echo $FOOx $ echo ${FOO}x barx 

In het tweede echo commando drukt de shell niets af omdat het de shell vraagt om af te drukken een variabele genaamd FOOx, die niet “niet bestaat; de shell behandelt niet-bestaande variabelen als leeg. Omdat de derde echo de accoladesyntaxis gebruikt , het laat de shell zien dat je de FOO variabele opvraagt, en dat de x gewoon een ander teken is dat je direct daarna wilt afdrukken .

Er is trouwens een andere manier om hetzelfde effect te krijgen zonder accolades:

$ echo "$FOO"x barx 

Omgevingsvariabelen worden uitgebreid in dubbele aanhalingstekens, en de aanhalingstekens scheiden de x van de variabele uitbreiding zodat de shell het juiste doet.

Ik “gebruik de FOO omgevingsvariabele hier voor de duidelijkheid. Alles wat ik hierboven heb geschreven, is net zo goed van toepassing op , aangezien het gewoon een andere omgevingsvariabele is. De voorbeeldteksten zouden gewoon veel langer zijn.

Wat betekent PATH exporteren? Wanneer exporteren we?

Als u het bovenstaande FOO voorbeeld neemt, als u een ander programma zou draaien, zou de variabele FOO niet zien omdat deze niet wordt geëxporteerd. Het leeft alleen binnen die ene shell-instantie:

$ echo $FOO bar $ bash $ echo $FOO $ exit $ export FOO $ bash $ echo $FOO bar 

Toen ik voor het eerst een nieuwe bash shell startte onder degene die ik al gebruikte, probeer dan de waarde van FOO krijg een blanco omdat FOO niet werd geëxporteerd zodat subprogrammas ze konden zien. Vervolgens heb ik de tweede bash instantie afgesloten, deze geëxporteerd, bash opnieuw uitgevoerd en nu ziet de tweede instantie de waarde van FOO.

U gebruikt export wanneer u wilt dat subprogrammas waarden zien die in de shell zijn ingesteld, en deze niet gebruiken als je dat niet wilt.

Meestal exporteer ik geen tijdelijke variabelen in shell-scripts, omdat ik niet wil dat ze veranderen hoe programmas die vanuit dat shell-script draaien zich gedragen.

Ik ga geen van je andere vragen beantwoorden. Het is de bedoeling dat je maar één vraag tegelijk stelt. Ik heb er alleen zo veel beantwoord omdat ze vaag verwant zijn. Al het andere hoort thuis in een aparte vraag.

Geef een reactie

Het e-mailadres wordt niet gepubliceerd. Vereiste velden zijn gemarkeerd met *