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 álneveketcd ..
stb.). - Gyakran használok
pushd
&popd
a b / c szkriptekben megmentenek attól, hogy emlékeznem kell arra, ahonnan jöttem, mindig csakpopd
tudok visszatérni ahova jöttem. Általábanpopd >/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
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
acd
-től függetlenül működik, stabilabbként használhatja őket könyvjelző, mintcd -
. - 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
? Acd
úgy fog viselkedni, mint apushd
, 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
dirs -c