Zajímalo by mě, kde je třeba přidat novou cestu do PATH proměnná prostředí. Vím, že toho lze dosáhnout úpravou .bashrc (například), ale není jasné, jak to udělat.
Tímto způsobem:
export PATH=~/opt/bin:$PATH
nebo tohle?
export PATH=$PATH:~/opt/bin
Přijatá odpověď:
Jednoduché věci
PATH=$PATH:~/opt/bin
nebo
PATH=~/opt/bin:$PATH
podle toho, zda chcete přidat ~/opt/bin na konci (prohledává se za všemi ostatními adresáři, v případě, že je program se stejným názvem ve více adresářích) nebo na začátku (prohledává se před všemi ostatními adresáři).
Můžete přidat více záznamů současně. PATH=$PATH:~/opt/bin:~/opt/node/bin nebo variace na objednání fungují dobře. Nezadávejte export na začátku řádku, protože má další komplikace (viz níže v části „Poznámky k jiným shellům než bash“).
Pokud je vaše PATH je tvořen mnoha různými komponentami, můžete skončit s duplicitními položkami. Viz Jak přidat cestu domovského adresáře, která má být objevena systémem Unix, který příkaz? a Odstraňte duplicitní položky $PATH pomocí příkazu awk, abyste se vyhnuli přidávání duplikátů nebo je odstranili.
Některé distribuce automaticky vkládají ~/bin mimochodem ve vaší PATH, pokud existuje.
Kam to umístit
Vložte řádek pro úpravu PATH v ~/.profile nebo v ~/.bash_profile pokud je to to, co máte.
Všimněte si, že ~/.bash_rc není čten žádným programem a ~/.bashrc je konfigurační soubor interaktivních instancí bash. V ~/.bashrc byste neměli definovat proměnné prostředí . Správné místo pro definování proměnných prostředí, jako je PATH je ~/.profile (nebo ~/.bash_profile pokud vás nezajímají jiné shelly než bash). Podívejte se, jaký je mezi nimi rozdíl a který z nich bych měl použít?
Nevkládejte to do /etc/environment nebo ~/.pam_environment :toto nejsou soubory shellu, nemůžete použít substituce jako $PATH tam. V těchto souborech můžete proměnnou pouze přepsat, nikoli do ní přidat.
Možné komplikace v některých systémových skriptech
Nepotřebujete export pokud je proměnná již v prostředí:jakákoli změna hodnoty proměnné se projeví v prostředí.¹ PATH je téměř vždy v prostředí; všechny unixové systémy to nastavily velmi brzy (ve skutečnosti obvykle v prvním procesu).
V době přihlášení se můžete spolehnout na PATH je již v prostředí a již obsahuje některé systémové adresáře. Pokud píšete skript, který může být spuštěn brzy při nastavování nějakého virtuálního prostředí, možná budete muset zajistit, aby PATH je neprázdný a exportovaný:if PATH je stále nenastaveno, pak něco jako PATH=$PATH:/some/directory by nastavil PATH do :/some/directory a prázdná složka na začátku znamená aktuální adresář (jako .:/some/directory ).
if [ -z "${PATH-}" ]; then export PATH=/usr/local/bin:/usr/bin:/bin; fi
Poznámky k jiným shellům než bash
V bash, ksh a zsh export je speciální syntaxe a obě PATH=~/opt/bin:$PATH a export PATH=~/opt/bin:$PATH dokonce udělat správnou věc. V jiných shellech ve stylu Bourne/POSIX, jako je pomlčka (což je /bin/sh na mnoha systémech), export je analyzován jako běžný příkaz, což znamená dva rozdíly:
~je analyzován pouze na začátku slova, s výjimkou přiřazení (podrobnosti viz Jak přidat cestu domovského adresáře, která má být objevena Unixem, který příkaz?);$PATHmimo dvojité uvozovky zalomí, pokudPATHobsahuje mezery nebo[*?.
Takže v prostředí jako je pomlčka nastaví export PATH=~/opt/bin:$PATH PATH na doslovný řetězec ~/opt/bin/: následovaná hodnotou PATH až do prvního prostoru. PATH=~/opt/bin:$PATH (holý úkol) nevyžaduje uvozovky a dělá správnou věc. Pokud chcete použít export v přenosném skriptu musíte napsat export PATH="$HOME/opt/bin:$PATH" , nebo PATH=~/opt/bin:$PATH; export PATH (nebo PATH=$HOME/opt/bin:$PATH; export PATH pro přenositelnost i do Bourne shellu, který neakceptoval export var=value a neprovedl expanzi vlnovky).
¹ To neplatilo v Bourne shellech (jako ve skutečném Bourne shellu, nikoli v moderních shellech ve stylu POSIX), ale je velmi nepravděpodobné, že se v dnešní době setkáte s tak starými shelly.