GNU/Linux >> Znalost Linux >  >> Linux

Jak správně přidat cestu k cestě?

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í, pokud PATH obsahuje mezery nebo [*? .

Takže v prostředí jako je pomlčka export PATH=~/opt/bin:$PATH nastaví 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).

Související:Centos – Proč se na CentOS 7 nenainstaluje správná nová verze Node.js?

¹ 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.


Linux
  1. Jak přidat úložiště Yum

  2. Jak přidat více hostitelů v phpMyAdmin

  3. Jak bych mohl přidat dir do $PATH v Makefile?

  1. Jak přidat soubor .so do java.library.path v Linuxu

  2. Jak přidat Chromedriver do PATH v linuxu?

  3. Jak přidat konkrétní adresáře do vyhledávací cesty updatedb (locate)?

  1. Jak přidat adresář do PATH v Linuxu [s příklady]

  2. Jak přidat uživatele do skupiny v Linuxu

  3. Jak čistě přidat do $path?