V první části této série jsme probírali cd - příkaz podrobně a ve druhé části jsme se podrobně podívali na pushd a pop příkazy a také scénáře, ve kterých se hodí.
Pokračujeme v diskusi o aspektech navigace v příkazovém řádku a v tomto tutoriálu probereme CDPATH proměnné prostředí prostřednictvím snadno srozumitelných příkladů. Probereme také některé pokročilé podrobnosti související s touto proměnnou.
Ale než budeme pokračovat, stojí za zmínku, že všechny příklady v tomto tutoriálu byly testovány na Ubuntu 14.04 s verzí Bash 4.3.11(1).
Proměnná prostředí CDPATH
I když vaše práce na příkazovém řádku zahrnuje provádění všech operací v konkrétním adresáři – řekněme ve vašem domovském adresáři –, musíte také při přepínání adresářů zadat absolutní cesty. Vezměme si například situaci, kdy jsem v /home/himanshu/Downloads adresář:
$ pwd
/home/himanshu/Downloads
A požadavek je přepnout na /home/himanshu/Desktop adresář. K tomu obvykle musím buď spustit:
cd /home/himanshu/Desktop/
nebo
cd ~/Desktop/
nebo
cd ../Desktop/
Nebylo by snadné, kdybych mohl spustit následující příkaz:
cd Desktop
Ano, to je možné. A zde přichází na řadu proměnná prostředí CDPATH. Tuto proměnnou můžete použít k definování základního adresáře pro cd příkaz.
Pokud se pokusíte vytisknout její hodnotu, uvidíte, že tato proměnná env je ve výchozím nastavení prázdná:
$ echo $CDPATH
$
Nyní, s ohledem na případ, o kterém jsme dosud diskutovali, pojďme použít tuto proměnnou prostředí k definování /home/himanshu jako základní adresář pro příkaz cd.
Nejjednodušší způsob, jak to udělat, je:
export CDPATH=/home/himanshu
A nyní mohu dělat to, co jsem dříve nemohl – z /home/himanshu/Stahování spusťte cd Desktop příkaz úspěšně.
$ pwd
/home/himanshu/Downloads
$ cd Desktop/
/home/himanshu/Desktop
$
To znamená, že nyní mohu vytvořit cd do libovolného adresáře pod /home/himanshu bez explicitního určení /home/himanshu nebo ~ nebo ../ (nebo více ../ )v příkazu cd.
Body, které je třeba mít na paměti
Nyní tedy víte, jak jsme použili proměnnou prostředí CDPATH ke snadnému přechodu do/z /home/himanshu/Stahování z/do /home/himanshu/Desktop . Nyní zvažte situaci, kdy v /home/himanshu/Desktop adresář obsahuje podadresář s názvem Downloads , a je to poslední místo, kde hodláte přepnout.
Ale najednou si uvědomíte, že děláte cd Desktop přejdete na /home/himanshu/Desktop . Takže, abyste se ujistili, že se to nestane, udělejte:
cd ./Stažení
I když ve výše uvedeném příkazu jako takovém není žádný problém, je to z vaší strany další úsilí (jakkoli malé), zvláště vezmeme-li v úvahu, že to budete muset udělat pokaždé, když taková situace nastane. Elegantnějším řešením tohoto problému může být původní nastavení proměnné CDPATH následujícím způsobem:
export CDPATH=".:/home/himanshu"
To znamená, že říkáte příkazu cd, aby nejprve hledal adresář v aktuálním pracovním adresáři a poté zkusil vyhledat /home/himanshu adresář. Samozřejmě, zda chcete, aby se příkaz cd choval tímto způsobem, závisí zcela na vašich preferencích nebo požadavcích – mým nápadem při diskuzi o tomto bodu bylo dát vám vědět, že taková situace může nastat.
Jak jste již pochopili, jakmile je proměnná CDPATH env nastavena, její hodnota - nebo sada cest, které obsahuje - jsou jedinými místy v systému, kde příkaz cd hledá adresáře (samozřejmě kromě scénářů, kde-in používáte absolutní cesty). Je tedy zcela na vás, abyste zajistili, že chování příkazu zůstane konzistentní.
Pokračujeme, pokud existuje bash skript, který používá příkaz cd s relativními cestami, pak je lepší nejprve vymazat nebo zrušit nastavení proměnné prostředí CDPATH, pokud se nechcete dostat do pasti nepředvídaných problémů. Případně raději než pomocí exportu příkaz na terminálu pro nastavení CDPATH, můžete nastavit proměnnou prostředí ve svém .bashrc
soubor po testování interaktivních/neinteraktivních shellů, abyste se ujistili, že změna, kterou se pokoušíte provést, se projeví pouze v interaktivních shellech.
Důležité je také pořadí, ve kterém se cesty objevují v hodnotě proměnné prostředí. Pokud je například aktuální adresář uveden před /home/himanshu , pak příkaz cd nejprve vyhledá adresář v aktuálním pracovním adresáři a poté přejde na /home/himanshu . Pokud je však hodnota "/home/himanshu:." poté bude provedeno první vyhledávání v /home/himanshu a poté aktuální adresář. Netřeba dodávat, že to ovlivní to, co příkaz cd dělá, a může způsobit problémy, pokud neznáte pořadí cest.
Vždy mějte na paměti, že proměnná prostředí CDPATH, jak název napovídá, funguje pouze pro příkaz cd. To znamená, že když jste uvnitř /home/himanshu/Downloads adresáře, můžete spustit cd Desktop příkaz pro přepnutí na /home/himanshu/Desktop adresář, ale nemůžete provést ls . Zde je příklad:
$ pwd
/home/himanshu/Downloads
$ ls Desktop
ls: cannot access Desktop: No such file or directory
$
Mohlo by však existovat několik jednoduchých řešení. Například můžeme s minimálním úsilím dosáhnout toho, co chceme, následujícím způsobem:
$ cd Desktop/;ls
/home/himanshu/Desktop
backup backup~ Downloads gdb.html outline~ outline.txt outline.txt~
Ale ano, nemusí existovat řešení pro každou situaci.
Další důležitý bod: jak jste si mohli všimnout, kdykoli použijete příkaz cd se sadou proměnných prostředí CDPATH, příkaz vytvoří na výstupu úplnou cestu k adresáři, do kterého přepínáte. Netřeba dodávat, že ne každý by chtěl mít tyto informace pokaždé, když na svém počítači spustí příkaz cd.
Chcete-li se ujistit, že tento výstup bude potlačen, můžete použít následující příkaz:
alias cd='>/dev/null cd'
Výše uvedený příkaz ztlumí výstup, kdykoli je příkaz cd úspěšný, ale umožní generování chybových zpráv, kdykoli příkaz selže.
A konečně, v případě, že narazíte na problém, kdy po nastavení proměnné prostředí CDPATH nemůžete použít funkci dokončování karet v shellu, můžete zkusit nainstalovat a povolit dokončování bash – více o tom zde.
Závěr
Proměnná prostředí CDPATH je dvousečný meč – pokud se nepoužívá opatrně a s úplnými znalostmi, může vás dostat do složitých pastí, jejichž vyřešení může vyžadovat spoustu času a drahocenného času. To samozřejmě neznamená, že byste to nikdy neměli zkusit; stačí vyhodnotit všechny dostupné možnosti a pokud dojdete k závěru, že použití CDPATH by bylo velmi užitečné, pokračujte a použijte jej.
Používáte CDPATH jako profesionál? Máte nějaké další tipy, o které se můžete podělit? Podělte se o své myšlenky v komentářích níže.