3 způsoby úpravy cesty v příkazovém řádku

Proměnná prostředí PATH je jednou z nejdůležitějších součástí používání příkazového řádku v systému Linux. V moderním systému se často jedná o velmi dlouhý řetězec adresářů oddělených dvojtečkami. Pokud chcete změnit nějakou položku v cestě, může být nepříjemné, že musíte zadávat a upravovat spoustu různých názvů adresářů a všechno správně. Naštěstí existuje několik způsobů, jak si to usnadnit. Totéž platí pro jakoukoli proměnnou prostředí a většina nástrojů, které vám ukážu, bude fungovat pro jakoukoli z nich.

Přehled

Stejně jako u většiny věcí v Linuxu existuje mnoho způsobů, jak dosáhnout svého cíle. I když jsem řekl, že existují tři způsoby, pravděpodobně jich je nekonečné množství, a zde je jeden, který nebudu počítat mezi ty tři:

Tento postup však funguje pouze v případě, že chcete něco přidat na začátek nebo konec proměnné. Řekněme například, že chcete přidat ~/foo do PATH:

# add to the end:
PATH="$PATH:~/foo"
# add to the start:
PATH="~/foo:$PATH"

To je snadné, ale nepomůže to, pokud chcete něco v proměnné odstranit nebo změnit. Nepomůže to ani v případě, že chcete změnit pořadí některých existujících adresářů.

Způsob 1: Nejtěžší způsob

Předpokládáme, že se nacházíte uvnitř terminálu s grafickým uživatelským rozhraním, pravděpodobně máte k dispozici způsob, jak vyjmout a vložit text. Může se tedy zdát, že je snadné napsat:

echo $PATH

Poté můžete text sebrat a na novém příkazovém řádku zadat PATH=" a vložit zbytek textu. Proveďte změny, uzavřete uvozovky a stiskněte klávesu Enter. Možná si říkáte, že to není příliš velké zlepšení, pokud potřebujete upravit stávající text, ale ukazuje se, že pokud v bashi stisknete CONTROL+X, CONTROL+E, zobrazí se pěkné okno editoru, kde můžete svůj příkaz upravit. To bude fungovat s jakýmkoli příkazem a je to velmi užitečné, když z historie vytahujete dlouhý příkazový řádek, který potřebujete opravit.

Jak bash pozná, jaký editor má použít? Pomocí proměnné prostředí EDITOR. Pokud se vám nelíbí editor, který vyvolává ve výchozím nastavení, změňte spouštěcí soubor (např. .bashrc) a nastavte proměnnou:

EDITOR=nano

To je dobré, ale můžeme to udělat lépe. Koneckonců tato metoda vyžaduje zobrazení proměnné, ruční psaní a následné kopírování a vkládání.

Metoda 2: envedit/pathedit

Na GitHubu najdete skripty pro envedit a pathedit. Jedná se o jednoduché skripty, které můžete umístit do systému na nějaké místo, kde budou k nalezení (například /usr/local/bin). Pokud chcete, aby byly nalezeny na cestě, měli byste je učinit spustitelnými (chmod 755).

Problém je v tom, že veškeré změny, které skript provede v prostředí, se po jeho ukončení nezachovají (viz část Co je prostředí?, níže). V důsledku toho musíte tyto soubory zdrojovat, aby fungovaly. Skript pathedit upraví PATH ve vašem oblíbeném editoru, zatímco envedit vyžaduje jméno proměnné a provede stejnou práci:

# use . or source for these scripts
. pathedit
# or
source pathedit
. envedit PULSE # edit $PULSE

Je poněkud otravné si neustále pamatovat jejich zdrojování, proto mají skripty speciální funkci. Pokud je jednou zdrojujete v souboru .bashrc a předáte jim argument alias, skripty si samy nastaví alias, takže stačí napsat pathedit nebo envedit a zdrojování proběhne:

. pathedit alias # now just typing pathedit will work

Jako obvykle skript pomocí $EDITOR pozná, jaký editor má použít. Pokud chcete speciální editor pouze pro tento účel, nastavte $PATHEDIT_EDITOR nebo $ENVEDIT_EDITOR a přepíše se obvyklé nastavení. Pokud toto není nastaveno, skript hledá $EDITOR a $VISUAL a pak implicitně použije vi.

Způsob 3: envedit2/pathedit2

Třetí způsob je také na stejné stránce GitHub. Operace je stejná jako u metody 2. To znamená, že stále někam umístíte soubory a zavoláte je s argumentem alias, abyste je nastavili. Tyto skripty však nepoužívají váš textový editor. Místo toho načtou vyrovnávací paměť příkazového řádku bash se správným řetězcem k úpravě. Je to velmi podobné první metodě, až na to, že jednotlivé kroky jsou za vás automatizovány.

Všimněte si, že když spustíte některý z nich, nastaví alias pro envedit nebo pathedit, takže k jejich použití nepoužijete 2, kromě případů, kdy je nastavíte. To také znamená, že „vyhrává“ ten, který jste nastavili jako poslední. Nemůžete nastavit oba najednou, pokud neprovedete nějakou operaci se skripty nebo nenastavíte vlastní aliasy.

Při spuštění některého z těchto skriptů se před výzvou může objevit podivný znak escape. To je stavové hlášení, které spouští naplnění vyrovnávací paměti. Je to neškodné, a pokud vás to obtěžuje, stačí stisknout CONTROL+L pro překreslení obrazovky.

Tady jsou vaše tři

Pokud chcete používat pouze tyto skripty, máte hotovo. Doufám, že se vám budou hodit. Pokud vás nezajímá, jak a proč to všechno funguje, můžete zde přestat. Pokud se ale chcete dozvědět více o tom, proč jsou tyto skripty aliasovány a jak funguje prostředí, čtěte dál.

Co je to prostředí?

Prostředí si můžete představit jako malou databázi, která se předává každému programu. Například pravděpodobně máte proměnnou prostředí s názvem EDITOR, která je obvykle nastavena na něco jako vi, emacs nebo nano. Když program potřebuje vyvolat textový editor, přečtením této proměnné prostředí zjistí, který editor rádi používáte.

Když program A spustí jiný program (B), podřízený program dostane kopii prostředí, ačkoli program A v něm může provést změny předtím, než spustí B. Všechny změny, které B provede, však platí pouze pro B a všechny programy, které spustí.

Prakticky to znamená, že nic, co uděláte ve spuštěném programu, neovlivní žádný jiný program, který z něj nebyl spuštěn. To je skutečný problém v shellových skriptech. Předpokládejme například, že chcete napsat skript, který přidá ~/foo na konec PATH. To nebude fungovat:

#!/bin/bash
# Bad example
PATH="$PATH:~/foo"

Problém je v tom, že skript se spustí ve své vlastní kopii bashe. Poslušně změní proměnnou PATH a pak se ukončí, čímž nová kopie PATH zmizí. Změna by samozřejmě platila pro jakoukoli jinou část skriptu. Aby to fungovalo, museli byste skript source (a pak už nepotřebuje řádek #!, i když není na škodu ho ponechat). Předpokládejme, že název výše uvedeného skriptu byl foopath. Mohli byste říci:

source ./foopath
# or the same thing:
. ./foopath

Takto fungují některé ze zmíněných skriptů, které pomocí sourcingu do shellu mohou změnit jeho aktuální prostředí.

To je vlastně všechno… Kromě

Pokud jste se dostali až sem, gratulujeme. Doufám, že se vám tyto nástroje budou hodit, a nezapomeňte nahlásit chyby na GitHubu.

Bonusové kolo

Již dříve jsem řekl, že ruční vyřezávání a vkládání může být nejtěžší způsob. Existuje však ještě jeden způsob, jak to udělat. Pokud máte správně nastavený soubor /etc/inputrc nebo ~/.inputrc, můžete zadat (ale nestisknout Enter):

PATH=$PATH

Poté stiskněte Alt+Control+E a shell za vás rozšíří proměnnou $PATH. Pokud však zkusíte:

PATH="$PATH"

Uvidíte, že při expanzi se vám ztratí uvozovky. Musíte tedy provést nešikovný postup:

PATH=\"$PATH\"

Poté stiskněte Alt+Control+E. Výstup z bind -P vám může říci, zda je funkce shell-expand-line na něco vázána.

Napsat komentář

Vaše e-mailová adresa nebude zveřejněna.