Hogyan használhatom a pushd és a popd parancsokat?

Milyen gyakorlati haszna van mind a pushd, mind a popd amikor előnye van e két parancs használatának a cd és a cd -?

SZERKESZTÉS : Néhány gyakorlati példát keresek mindkét parancs használatára, illetve a verem könyvtárakkal való megőrzésének okaira (ha a lapok befejeződtek, cd -, rövidítési álnevek cd .. stb.).

Válasz

pushd , A popd és dirs héj beépítettek, amelyek lehetővé teszi a könyvtárköteg kezelését. Ez könyvtárak megváltoztatására használható, de visszatérhet abba a könyvtárba, ahonnan jött.

Például

a következő könyvtárakkal indul:

$ pwd /home/saml/somedir $ ls dir1 dir2 dir3 

pushd a dir1-be

$ pushd dir1 ~/somedir/dir1 ~/somedir $ dirs ~/somedir/dir1 ~/somedir 

dirs parancs megerősíti, hogy most 2 könyvtár van a veremben. dir1 és az eredeti dir, somedir. MEGJEGYZÉS: ” áram ” könyvtár ~/somedir/dir1.

a ../dir3 könyvtárra tolódik (mert most dir1 vagyunk)

$ pushd ../dir3 ~/somedir/dir3 ~/somedir/dir1 ~/somedir $ dirs ~/somedir/dir3 ~/somedir/dir1 ~/somedir $ pwd /home/saml/somedir/dir3 

dirs azt mutatja, hogy most 3 könyvtár található a veremben. dir3, dir1 és somedir. Figyelje meg az irányt. Minden új könyvtár balra kerül. Amikor elkezdünk könyvtárakat felugrani ki, balról is jönnek.

a könyvtárakat manuálisan megváltoztatni ../dir2

$ cd ../dir2 $ pwd /home/saml/somedir/dir2 $ dirs ~/somedir/dir2 ~/somedir/dir1 ~/somedir 

Most kezdje el a könyvtárak felbukkanását

$ popd ~/somedir/dir1 ~/somedir $ pwd /home/saml/somedir/dir1 

Figyelem, hogy visszatértünk a dir1 helyre.

Újra felbukkan …

$ popd ~/somedir $ pwd /home/saml/somedir 

És visszatérünk oda, ahonnan indultunk, somedir.

Lehet, hogy kissé összezavarodik, de a stac feje k az a könyvtár, amelyben éppen tartózkodsz. Ezért amikor visszatérünk a somedir oldalra, annak ellenére, hogy az dirs ezt mutatja:

$ dirs ~/somedir 

A verem valójában üres.

$ popd bash: popd: directory stack empty 

Megjegyzések

  • Köszönöm, teljesen megértem a verem fogalmát és a parancsok működését. Azonban ‘ keresek néhány gyakorlati okot a verem könyvtárakkal való megőrzésére (amikor a tab befejezése megtörtént, cd -, a rövidítéshez használt álneveket cd .. stb.).
  • Gyakran használok pushd & popd a b / c szkriptekben megmentenek attól, hogy emlékeznem kell arra, ahonnan jöttem, mindig csak popd tudok visszatérni ahova jöttem. Általában popd >/dev/null 2>&1 teszem, hogy elhallgattassam. A héjában minden nap használom a cd-t. Ebben a cikkben is van néhány más időmegtakarítási tipp: thegeekstuff.com/2008/10/… .
  • @Garrett – senki, amit elképzelni tudnék.
  • @Garrett @slm mivel a cd - csak az utolsó könyvtárat követi nyomon, azt képzelem, hogy Lehetséges, hogy problémák merülnek fel, ha meghív egy olyan függvényt, amely a könyvtárat is belső módon változtatja meg. ebben az esetben a függvény visszaállna – az aktuális könyvtárba, nem pedig abba a könyvtárba, amelybe vissza akar ugrani. a pushd / popd a legbiztonságosabb módszer. Megjegyzés: Nem teszteltem az elméletemet ‘.
  • Miért nem térek vissza az ~/somedir/dir3 -re az első popd?

Válasz

Van nagyon hasznos használati eset a pushd és popd parancsokhoz több mappával egyidejűleg való munkához.

Nagyon egyszerűen navigálhat a veremben, mivel fel van sorolva. Ez azt jelenti, hogy több működő mappa áll rendelkezésére a munka során.

Lásd az alábbi egyszerű példát.


Először hozzuk létre a példa mappaszerkezetet.

 user@vb:~$ mkdir navigate user@vb:~/navigate$ mkdir dir1 user@vb:~/navigate$ mkdir dir2 user@vb:~/navigate$ mkdir dir3 

Ezután hozzáadhatja az összes mappát a veremhez :

 user@vb:~/navigate$ pushd dir1/ ~/navigate/dir1 ~/navigate user@vb:~/navigate/dir1$ pushd ../dir2/ ~/navigate/dir2 ~/navigate/dir1 ~/navigate user@vb:~/navigate/dir2$ pushd ../dir3/ ~/navigate/dir3 ~/navigate/dir2 ~/navigate/dir1 ~/navigate 

Megtalálhatja:

 user@vb:~/navigate/dir3$ dirs -v 0 ~/navigate/dir3 1 ~/navigate/dir2 2 ~/navigate/dir1 3 ~/navigate 

A biztonságos navigáláshoz kétszer kell hozzáadnod az utolsó (nulla) mappát, mivel az mindig át lesz írva:

 user@vb:~/navigate/dir3$ pushd . user@vb:~/navigate/dir3$ dirs -v 0 ~/navigate/dir3 1 ~/navigate/dir3 2 ~/navigate/dir2 3 ~/navigate/dir1 4 ~/navigate 

Most már átugorhatod ezeket a mappákat, és együtt dolgozhatsz vele verem, mint a mappák álneveinél.Azt hiszem, a következő rész nem magától értetődő:

 user@vb:~/navigate/dir3$ cd ~4 user@vb:~/navigate$ dirs -v 0 ~/navigate 1 ~/navigate/dir3 2 ~/navigate/dir2 3 ~/navigate/dir1 4 ~/navigate user@vb:~/navigate$ cd ~3 user@vb:~/navigate/dir1$ dirs -v 0 ~/navigate/dir1 1 ~/navigate/dir3 2 ~/navigate/dir2 3 ~/navigate/dir1 4 ~/navigate user@vb:~/navigate/dir1$ touch text.txt user@vb:~/navigate/dir1$ cp text.txt ~2 user@vb:~/navigate/dir1$ ls ~2 text.txt user@vb:~/navigate/dir1$ dirs -v 0 ~/navigate/dir1 1 ~/navigate/dir3 2 ~/navigate/dir2 3 ~/navigate/dir1 4 ~/navigate 

További tipp néhány álnevet kell létrehoznia a dirs -v számára.

Például:

# In ~/.bashrc alias dirs="dirs -v" 

Megjegyzések

  • És a köteget dirs -c
  • valójában néhány gyakorlati példát felhozva. ‘ könnyű felismerni, hogy mit csinál a pushd / popd a man oldalról, de a dirs és a cd ~ # eleinte nem nyilvánvaló.
  • használhatod is az ilyen típusú munkafolyamathoz hasonló megoldás, mint például a fasd, bár
  • @Jun, ott ‘ s ” mkdir dir {1,2,3} ” 3 könyvtár létrehozása egy lövés alatt.
  • @JunMurakami ettől lett az évem! Boldog 2020-at!

Válasz

Egy egyszerű felhasználási eset a dirs stack használatához, amit nem tudsz megtenni csak CD-vel: :

pushd . hozzáadja az aktuális XX könyvtárat az dirs veremhez. Utána a cd használatával mozoghat, és a XX-hez való visszatéréshez csak popd kell tennie, függetlenül attól, hogy “milyen messze van” a könyvtárfa (átugorhat több szintet, oldalra stb.). Különösen hasznos a bash szkriptekben.

Megjegyzések

  • Úgy gondolom, hogy ez az a funkció, amelyet leggyakrabban kihasználok. Mivel a pushd / popd a cd -től függetlenül működik, stabilabbként használhatja őket könyvjelző, mint cd -.
  • számomra ez nem igaz. Minden alkalommal, amikor a CD-t használom, változik a verem.
  • ó, ez annyi volt, mint a zsh használata, amikor a bash-ra váltok, ez jól működik
  • Ez az egyetlen érdemi válasz az összehasonlításra cd-vel -, IMO. Arról, hogy pushd foo; < véletlenszerű dir változó >; a popd érdemesebb, mint a = foo; cd $ a; < véletlenszerű dir változó >; cd $ a … A szkriptek esetében apró szintaktikai kényelmet látok az előbbiben (pushd), az utóbbiban ([explicit] változókban) az egyértelműség hatalmas javulást mutat. Egy interaktív munkamenetnél azt gondolom, hogy csak azt feltételezném, hogy a könyvtárhierarchiám eleve rendesen rendeződik, és ha eltévedtem, egyszerűen cd ~ / back / to / ilms / path.
  • @HarendraSingh ‘ nincs beállítva AUTO_PUSHD? A cd úgy fog viselkedni, mint a pushd, hatástalanítja, és ‘ vissza fog térni ” normális viselkedés “.

Válasz

pushd és popd lehetővé teszi a verem könyvtárainak manipulálását.

Amikor pushd könyvtárat ad, az aktuális könyvtárat felteszi a veremre, és megváltoztatja a könyvtárat a paraméterként megadott könyvtárra.

popd lehetővé teszi, hogy visszatérjen a verem könyvtárába.

Ha megismétli, akkor a könyvtár bejárása mintegy megőrződik, és visszatérhet a mentett könyvtárakhoz fordított sorrendben, mint ahová mentette őket.

Válasz

A bash esetében alapvetően: a cd használata helyett a pushd segítségével módosíthatja a könyvtárakat. Gyakorlati használat esetén: a meglátogatott könyvtárak előzményei mentésre kerülnek (helyesen: halmozottan), és lehet váltani közöttük:

pushd /home; pushd /var; pushd log 

A verem megtekintéséhez használja a dirs és a könnyebb navigálás érdekében (a ” verem-bejegyzések ” használatához:

dirs -v 

Kimenet:

me@myhost:/home$ dirs -v 0 /home 1 /var 2 /tmp 

Most használja ezeket a számokat a cd és ~ mint:

cd ~1 

De ezek a számok most átrendeződnek, és a ” 0 ” megváltozik, ezért csak pushd a könyvtár kétszer a legfelső pozícióba (vagy használja bábu a 0. pozícióban), például:

me@myhost:/home$ dirs -v 0 /home 1 /home 2 /var 3 /tmp 

Most 1..3 megtartja pozícióját

(Az aktuális könyvtár felszabadításához a verem / törlés az előzményekből, használja a popd)

Válasz

A pushd / popd olyan egyszerű fogalom, amelyet egy ideig megértettem, mivel az emberek hajlamosak arra tanítani, hogy ezeket a parancsokat parancsként definiálják, amelyek” manipulálják a könyvtárköteget “, ami véleményem szerint nagyon zavaró.

Másképp nézem:

pushd [mappa_neve] – a [mappanév] cd-t fogja tárolni, és dokumentumot fog megadni a rendeltetési hely, amely [mappa_neve] egy dir veremben, míg a legfelső könyvtár a veremben mindig az az aktuális dir lesz, amelyben vagy.

popd – először cd-be a verem tetején lévő könyvtárrekordot, majd távolítsa el a dokumentációt (távolítsa el a dir veremből)

dirs – A dir stacket kinyomtatja (a dir Db-ként kezelhető, ahol a bal szélső bejegyzés az aktuális könyvtár (a verem teteje)

Tehát a 2 legnépszerűbb felhasználási eset:

1. használati eset: Navigálás a pushd és a popd használatával

root@mypc:/main/$ ls dir1 dir2 dir3 dir4 root@mypc:/main/$ dirs # prints the current stack /main root@mypc:/main/$ pushd dir1 # Will cd to dir1 and document dir1 in dir stack, stack is now: /main/dir1 /main root@mypc:/main/dir1$ # I am now in /main/dir1 root@mypc:/main/dir1$ # Now let"s go wild and document whatever I want root@mypc:/main/dir1$ pushd ../dir2 root@mypc:/main/dir2$ # Woo I am in /main/dir2 root@mypc:/main/dir2$ pushd ../dir3 root@mypc:/main/dir3$ # Woo I am in /main/dir3 root@mypc:/main/dir3$ pushd ../dir4 root@mypc:/main/dir4$ # Woo I am in /main/dir4 root@mypc:/main/dir4$ dirs # Now dir stack is: /main/dir4 /main/dir3 /main/dir2 /main/dir1 /main 

Mondjuk Megtettem a fentieket, mivel szeretnék visszalépni azokba a mappákba, amelyeket dokumentáltam!

Ne feledje, hogy ha manuálisan cd-t használok, akkor hatással leszek a legfelső dir verem bejegyzésére (ami mindig az aktuális dir)

root@mypc:/main/dir4$ cd .. # Now dir stack is: # (note that /main appear in the leftmost as well which is the top of the stack) /main /main/dir3 /main/dir2 /main/dir1 /main root@mypc:/main$ 

Menjünk hátra:

root@mypc:/main$ popd root@mypc:/main$ # Still in /main since it was at the top of the dir stack root@mypc:/main$ dirs # Stack is now: /main/dir3 /main/dir2 /main/dir1 /main root@mypc:/main$ popd root@mypc:/main/dir3$ popd # Woo in dir3 now, about to navigate to dir2 root@mypc:/main/dir2$ popd # Woo in dir2, about to navigate to dir1 root@mypc:/main/dir1$ dirs # Stack is now: /main 

Ismét dokumentálhatom, amit csak akarok majd navigálok manuálisan egy másik könyvtárba, majd könnyedén visszatérhetek a verembe beillesztett dokumentált könyvtárhoz.

2. használati eset: Navigálás numerikus veremindex használatával

Mondjuk, hogy a pushd dir4 használatával toltam dir3 dir2 dir2 dir1, most a dir-v futtatása megmutatja:

root@mypc:/main$ dirs -v 0 /main/dir1 (this is the current dir you are in always) 1 /main/dir2 2 /main/dir3 3 /main/dir4 

Mostantól bármely Linux műveletet megtehet, amely könyvtárakat tartalmaz a veremindex használatával:

root@mypc:/main$ cp ~2/temp.txt ~3/new_temp.txt # this will run in the background, something like: # cp /main/dir2/temp.txt /main/dir3/new_temp.txt 

Még egy adott elemet is törölhet bejegyzés a dir veremből:

root@mypc:/main$ popd ~4 

Remélem, hogy a “dokumentálás” szavak használata vagy a dir veremre való gondolkodás, mivel valamilyen Db leegyszerűsíti a koncepció!

Válasz

Egyszerűen fogalmazva – ha több mint 2 könyvtár között kell navigálnia, általában többször vissza & tovább, mivel a cd - csak 2 mappán túl nem vágja át semmivel.

Így például: Ahelyett, hogy megpróbálná újra előállítani a korábbi hosszú útvonalakat, ha megnézi a puffer előzményeit vagy egy hosszú útvonalat hajt végre a tabulátorral, egyszerűen felrakja a fontosakat, és ha szükséges, kényelmesen csak számukra léphet hozzájuk. A bonyolult könyvtárak struktúrái és a hosszú utak közötti váltás simává és gyorsabbá válik.

A beépítettek lehetővé teszik a verem újrarendelését vagy a már nem szükséges könyvtárak kibontását is, lehetővé téve a munkafolyamat rugalmasságát.

A könyvtárak halmozása a parancsfájlokban hasonlóan használható több könyvtárat átfogó műveletekhez is.

Válasz

I kissé kényelmetlennek találta a dirs / popd / pushd használatát. A tcsh-ben találtam ki a személyes megoldásomat, az .alias

 foreach b (. , - 0 1 2 3 4 5 6 7 8 9 ) alias p$b "set a=`pwd`; echo $a >! ~/.mydir"$b alias cd$b "cd "`cat ~/.mydir"$b"`"" alias del$b "rm -v ~/.mydir"$b alias home$b "set a="~"; echo $a >! ~/.mydir"$b end alias cdl "grep / ~/.mydir*" 

fájlba illesztve a következő kódot. Ilyen módon álnevet adtam például a “p.” -nek, hogy az aktuális munkamenetet a ~ / .mydir. fájlba mentsem, és a “cd.” -et, hogy helyreállítsam a dir-t bármikor és bárhol. “del.” eltávolítja a megfelelő fájlt; A “home” a házirendet az otthoni dir-re állítja (egyenértékű a cd-vel; o.); a “cdl” felsorolja, hogy melyek a mentett direk. Vegye figyelembe, hogy ha a ~ / Dropbox / .mydir $ b (vagy bármely más felhőszolgáltatást) használ, pl. ownCloud) a ~ / .mydir $ b helyett okos módot kap az előnyben részesített direk különböző fiókokon és gépeken történő használatához.

Válasz

A cd és a cd - segítségével csak a két legutóbb használt könyvtár között válthat. A “könyvtár működő készlet” mérete két.

A pushd használatával tetszőlegesen sok könyvtárat tarthat a munkakészletben.

A legtöbb esetben a pushd -t használom a cd helyett. Miután felépített egy halom aktív könyvtárat a pushd directory_name alkalmazással, egész nap ugrálhat közöttük a pushd ~# gombbal.

pushd dir1 pushd ../dir2 pushd /full/path/to/dir3 # There are now three directories in the stack. pushd ~3 pushd ~2 # The same three directories are still on the stack, # just in a different order. 

A popd -et ritkán használom, csak akkor, ha egy könyvtárat el akarok távolítani a veremből, ha tudom, hogy kész vagyok használja ezt a könyvtárat.

Lépjen a könyvtárba, és távolítsa el a veremből:

popd ~2 

Maradjon az aktuális könyvtárban, és távolítson el egy másik könyvtárat a verem:

popd +2 

Olyan munkastílushoz jut, amely hasonló ahhoz, hogy több terminálablak vagy fül nyitott (egy minden könyvtárhoz, amelyben aktívan aktív) működő), de mindez egy terminálban van.Ez megmenti a képernyőn megjelenő ingatlanokat, ráadásul, mivel a könyvtárak elérési útjai egy héjban érhetők el, a következőket teheti:

  • fájlokat másolhat az éppen használt könyvtárak között
  • megtekintheti vagy szerkesztheti egy másik könyvtár fájljait anélkül, hogy odamenne

Példák:

cp ~2/myfile.txt ~4 less ~2/myfile.txt 

A tcsh (de nem bash), a könyvtárköteget akár fájlba is mentheti, majd később visszaállíthatja.

Mentés:

dirs -S ~/dirstack 

Visszaállítás:

dirs -L ~/dirstack 

Ellenkező esetben egyszerűen cserélje le a ~ a bash példákban a = példákkal a tcsh fájlban való használatra.

pushd =2 popd =4 popd +1 

Válasz

A bash_profile és az .bashrc fájlokban így használom

vi .bash_profile alias dirs="dirs -v" source d.sh :wq vi .bashrc alias dirs="dirs -v" :wq vi d.sh pushd ~/Documents/GIT/seiso-data pushd ~/Documents/GIT/ewe/EosRegistry pushd ~/Documents/GIT_LODGING/site-cookbooks pushd ~/Documents/CHEF_LODGING pushd . :wq 

ez segít s ugrok a könyvtáram között a legutóbb használt terminálomra. 🙂 Remélem, ez segít a pushd helyett a popd használatában, a cd ~ stackednumber

Vélemény, hozzászólás?

Az email címet nem tesszük közzé. A kötelező mezőket * karakterrel jelöltük