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?);$PATH
mimo dvojité uvozovky zalomí, pokudPATH
obsahuje 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.