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
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.
/etc/paths
op OSX.