GNU/Linux >> Znalost Linux >  >> Linux

Procházení shellu Bash pomocí pushd a popd

tlačítko a pop příkazy jsou vestavěné funkce prostředí Bash, které vám pomohou „uložit“ adresáře pro rychlou navigaci mezi umístěními na vašem pevném disku. Možná už máte pocit, že terminál je neuvěřitelně rychlý způsob navigace v počítači; pouhými několika stisknutími kláves můžete přejít kamkoli na pevný disk, připojené úložiště nebo sdílenou síť. Ale tato rychlost se může zlomit, když zjistíte, že přecházíte tam a zpět mezi adresáři, nebo když se „ztratíte“ ve svém souborovém systému. To jsou přesně ty problémy zatlačení a pop vám může pomoci vyřešit.

pushd

Ve své nejzákladnější podobě zatlačte je hodně jako cd . Přenese vás z jednoho adresáře do druhého. Předpokládejme, že máte adresář s názvem one , který obsahuje podadresář s názvem dva , který obsahuje podadresář s názvem tři , a tak dále. Pokud je váš aktuální pracovní adresář jeden , pak můžete přejít na dvě nebo tři nebo kdekoli pomocí cd příkaz:

$ pwd
jeden
$ cd dva/tři
$ pwd
tři

Totéž můžete provést pomocí pushd :

$ pwd
jeden
$ tlačen dva/tři
~/jeden/dva/tři ~/jeden
$ pwd
tři

Konečný výsledek pushd je stejné jako cd , ale existuje další mezivýsledek:pushd echo váš cílový adresář a váš výchozí bod. Toto je váš zásobník adresářů , a to je to, co dělá pushd jedinečný.

Zásobníky

Zásobník v počítačové terminologii označuje sbírku prvků. V kontextu tohoto příkazu jsou prvky adresáře, které jste nedávno navštívili pomocí pushd příkaz. Můžete si to představit jako historii nebo stezku.

Pomocí pushd se můžete pohybovat po celém souborovém systému; pokaždé se vaše předchozí a nové umístění přidají do zásobníku:

$ tlačí čtyři
~/jedna/dva/tři/čtyři ~/jedna/dva/tři ~/jedna
$ tlačí pět
~/jedna/dva/tři/čtyři/ pět ~/jedna/dva/tři/čtyři ~/jedna/dva/tři ~/jedna

Jakmile vytvoříte hromádku, můžete ji použít jako sbírku záložek nebo rychlých navigačních bodů. Předpokládejme například, že během relace děláte spoustu práce v rámci ~/jedna/dvě/tři/čtyři/pět adresářová struktura tohoto příkladu. Víte, že jste na jednom byli nedávno, ale nemůžete si vzpomenout, kde se ve vašem pushd nachází zásobník. Svůj stack můžete zobrazit pomocí +0 (to je znaménko plus následované nulou) argument, který říká pushd neměnit do žádného adresáře ve vašem zásobníku, ale také vyzve pushd pro opakování vašeho aktuálního zásobníku:

$ pushd +0
~/jedna/dva/tři/čtyři ~/jedna/dva/tři ~/jedna ~/jedna/dva/tři/čtyři/pět

Případně můžete zásobník zobrazit pomocí adresářů a pomocí -v můžete zobrazit číslo indexu pro každý adresář možnost:

$ dirs -v
0  ~/jedna/dva/tři/čtyři
1  ~/jedna/dva/tři
2  ~/jedna
3  ~/jedna/ dva/tři/čtyři/pět

První položka ve vašem zásobníku je vaše aktuální poloha. Můžete to potvrdit pomocí pwd jako obvykle:

$ pwd
~/jedna/dva/tři/čtyři

Počínaje 0 (vaše aktuální poloha a první položka ve vašem zásobníku), druhá prvek ve vašem zásobníku je ~/jeden , což je váš požadovaný cíl. Pomocí +2 se můžete ve svém stacku posunout vpřed možnost:

$ pushd +2
~/jedna ~/jedna/dva/tři/čtyři/pět ~/jedna/dva/tři/čtyři ~/jedna/dva/tři
$ pwd
~/one

Tím se změní váš pracovní adresář na ~/one a také posunul zásobník tak, aby vaše nové umístění bylo vpředu.

Ve svém zásobníku se můžete také posunout zpět. Chcete-li se například rychle dostat na ~/jedna/dvě/tři vzhledem k příkladu výstupu se můžete posunout o jeden zpět, přičemž mějte na paměti, že pushd začíná 0:

$ pushd -0
~/jedna/dva/tři ~/jedna ~/jedna/dva/tři/čtyři/pět ~/jedna/dva/tři/čtyři

Přidání do zásobníku

Tímto způsobem můžete pokračovat v procházení zásobníku a zůstane statickým seznamem vašich nedávno navštívených adresářů. Pokud chcete přidat adresář, stačí zadat cestu k adresáři. Pokud je adresář v zásobníku nový, přidá se do seznamu přesně tak, jak byste očekávali:

$ pushd /tmp
/tmp ~/jedna/dva/tři ~/jedna ~/jedna/dva/tři/čtyři/pět ~/jedna/dva/tři/čtyři

Ale pokud již v zásobníku existuje, bude přidán podruhé:

$ pushd ~/jedna
~/jedna /tmp ~/jedna/dva/tři ~/jedna ~/jedna/dva/tři/čtyři/pět ~/jedna/dva/tři/čtyři

I když se zásobník často používá jako seznam adresářů, ke kterým chcete mít rychlý přístup, je to skutečně skutečná historie toho, kde jste byli. Pokud nechcete, aby byl adresář přidán do zásobníku redundantně, musíte použít +N a -N notace.

Odebrání adresářů ze zásobníku

Váš stack samozřejmě není neměnný. Můžete jej přidat pomocí pushd nebo z něj odeberte položky pomocí popd .

Předpokládejme například, že jste právě použili pushd přidat ~/one do vašeho stacku, takže ~/one váš aktuální pracovní adresář. Chcete-li odstranit první (nebo "nulový", chcete-li) prvek:

$ pwd
~/jeden
$ popd +0
/tmp ~/jedna/dva/tři ~/jedna ~/jedna/dva/tři/čtyři/pět ~/jedna /dva/tři/čtyři
$ pwd
~/jedna

Samozřejmě můžete odstranit jakýkoli prvek, počínaje 0:

$ pwd ~/jedna
$ popd +2
/tmp ~/jedna/dva/tři ~/jedna/dva/tři/čtyři/pět ~/jedna/dva/tři/čtyři
$ pwd ~/one

Můžete také použít popd ze zadní části zásobníku, opět počínaje 0. Chcete-li například odstranit poslední adresář ze zásobníku:

$ popd -0
/tmp ~/jedna/dva/tři ~/jedna/dva/tři/čtyři/pět

Při tomto použití popd nezmění váš pracovní adresář. Pouze manipuluje s vaším stackem.

Výchozí chování popd , pokud nejsou uvedeny žádné argumenty, je odstranit první (nulovou) položku ze zásobníku a nastavit další položku jako aktuální pracovní adresář.

To je nejužitečnější jako příkaz pro rychlou změnu, když například pracujete ve dvou různých adresářích a potřebujete se na chvíli schovat na jiné místo. Pokud nepotřebujete propracovanou historii, nemusíte přemýšlet o svém adresáři:

$ pwd
~/jedna
$ pushd ~/jedna/dva/tři/čtyři/pět
$ pwd
$ pwd
~/jedna

Nemusíte také používat pushd a pop v rychlém sledu. Pokud používáte pushd Chcete-li navštívit jiné místo a poté se na tři hodiny rozptýlit hledáním chyby nebo průzkumem, zjistíte, že váš adresářový zásobník trpělivě čeká (pokud neukončíte terminálovou relaci):

$ pwd ~/one
$ pushd /tmp
$ cd {/etc,/var,/usr}; spánek 2001
[...]
$ popd
$ pwd
~/one

Pushd a popd ve skutečném světě

tlačítko a pop příkazy jsou překvapivě užitečné. Jakmile se je naučíte, najdete výmluvy, jak je dobře využít, a seznámíte se s konceptem adresářového zásobníku. Pohodlné používání pushd bylo to, co mi pomohlo pochopit git stash , která s pushd vůbec nesouvisí ale podobný v pojmové nehmotnosti.

Pomocí pushd a pop v shellových skriptech mohou být lákavé, ale obecně je pravděpodobně nejlepší se jim vyhnout. Nejsou přenosné mimo Bash a Zsh a mohou být tupé, když znovu čtete skript (pushd +3 je méně jasný než cd $HOME/$DIR/$TMP nebo podobně).

Kromě těchto varování, pokud jste běžným uživatelem Bash nebo Zsh, můžete a měli byste zkusit pushd a pop .


Linux
  1. Rychlá navigace v adresáři v prostředí Bash?

  2. Chápete význam `$_`?

  3. Proč Regex v Bash funguje pouze v případě, že je proměnnou a ne přímo?

  1. Výukový program Ultimate Bash Array s 15 příklady

  2. Variabilní rozsah pro skripty bash shell a funkce ve skriptu

  3. '&&' vs. '&' s příkazem 'test' v Bash

  1. Sledujte příkazy a úkoly pomocí příkazu watch v systému Linux

  2. Počítejte v linuxovém shellu s GNU bc

  3. Mohu zavolat pushd/popd a zabránit tomu, aby tiskl stoh?