Kuinka käytän pushd- ja popd-komentoja?

Mitkä ovat sekä pushd että popd kun näiden kahden komennon käytöstä on etua cd ja cd -?

MUOKKAA : Etsin joitakin käytännön esimerkkejä molempien komentojen käytöstä tai syistä pinon pitämiseen hakemistoissa (kun sarkain on valmis, cd -, aliakset lyhentämiseen cd .. jne.).

Vastaa

pushd , popd ja dirs ovat sisäänrakennettuja kuoreja antaa sinun manipuloida -hakemistopinoa . Tätä voidaan käyttää hakemistojen vaihtamiseen, mutta palata hakemistoon, josta tulit.

Esimerkiksi

käynnistetään seuraavilla hakemistoilla:

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

pushd kansioon dir1

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

dirs -komento vahvistaa, että pinossa on nyt kaksi hakemistoa. dir1 ja alkuperäinen käsky, somedir. HUOMAUTUS: ” nykyinen ” -hakemisto on ~/somedir/dir1.

työnnä kohtaan ../dir3 (koska olemme nyt dir1 sisällä)

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

dirs osoittaa, että pinossa on nyt 3 hakemistoa. dir3, dir1 ja somedir. Huomaa suunta. Jokainen uusi hakemisto lisätään vasemmalle. Kun alamme avata hakemistoja pois, ne tulevat myös vasemmalta.

Vaihda hakemistot manuaalisesti ../dir2

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

Aloita hakemistojen hakeminen nyt

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

Huomaa, että palasimme takaisin kohtaan dir1.

Pop taas …

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

Ja palaamme takaisin aloituspisteeseemme, somedir.

Saattaa saada hieman hämmentävää, mutta stacin pää k on hakemisto, jossa olet tällä hetkellä. Siksi kun palataan kohtaan somedir, vaikka dirs näyttää tämän:

$ dirs ~/somedir 

Pino on itse asiassa tyhjä.

$ popd bash: popd: directory stack empty 

Kommentit

  • Kiitos, ymmärrän täysin pinon käsitteen ja kuinka nämä komennot toimivat. Etsin kuitenkin ’ joitain käytännön syitä pinon pitämiselle hakemistojen kanssa (kun välilehti on valmis, cd -, aliaksia lyhentämiseen cd .. jne.).
  • Käytän usein pushd & popd skripteissä b / c ne säästävät minua siitä, ettei minun tarvitse muistaa, mistä tulin, voin aina vain popd palata takaisin minne tulin. Teen yleensä popd >/dev/null 2>&1 hiljaisuuden. Käytän CD-levyjä päivittäin kuoressani. Tässä artikkelissa on myös joitain muita ajansäästövinkkejä: thegeekstuff.com/2008/10/… .
  • @Garrett – ei ketään, jota voin ajatella.
  • @Garrett @slm koska cd - seuraa vain viimeistä hakemistoa, luulen sen tekevän voi olla ongelmia, jos soitat funktiolle, joka muuttaa myös hakemistoa sisäisesti. siinä tapauksessa toiminto palautuisi nykyiseen hakemistoon, ei hakemistoon, johon haluat palata takaisin. pushd / popd on turvallisin menetelmä. Huomaa: en ole testannut teoriani ’.
  • Miksi en palaisi ~/somedir/dir3 -sivulle ensimmäisen popd?

vastaus

todella hyödyllinen käyttötapa pushd ja popd -komennoille useiden kansioiden käsittelemiseen samanaikaisesti.

Voit siirtyä pinossa erittäin helposti, koska se on lueteltu. Tämä tarkoittaa, että sinulla voi olla käytössä useita toimivia kansioita työn aikana.

Katso alla oleva yksinkertainen esimerkki.


Anna ensin luoda esimerkkikansion rakenne.

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

Sitten voit lisätä kaikki kansiosi pinoon :

 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 

Voit etsiä sen seuraavasti:

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

Navigoidaksesi turvallisesti, sinun on lisättävä viimeinen (nolla) kansio kahdesti, koska se kirjoitetaan aina uudelleen:

 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 

Nyt voit selata näitä kansioita ja työskennellä pinota kuten kansioiden aliaksilla.Seuraava osa on kai itsestään selittävä:

 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 

Lisävinkki on tarkoitus luoda aliaksia tiedostolle dirs -v.

Esimerkiksi:

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

kommentit

  • Ja voit tyhjentää pinon dirs -c
  • +1 käyttäjälle tosiasiallisesti antamalla joitain käytännön esimerkkejä. ’ on helppo nähdä, mitä pushd / popd tekee man-sivulta, mutta dirs ja cd ~ # eivät ole aluksi ilmeisiä.
  • voit käyttää myös ratkaisu, kuten fasd, tällaiselle työnkululle, vaikka
  • @Jun, siellä ’ s ” mkdir dir {1,2,3} ” luoda kolme hakemistoa yhdellä otoksella.
  • @JunMurakami tämä teki minun vuosi! Hyvää vuotta 2020!

Vastaus

Yksi yksinkertainen käyttötapa dirs-pinon käyttämiseen, mitä et voi tehdä vain CD: llä, on :

pushd . lisää nykyisen hakemiston XX dirs -pinoon. Jälkeenpäin voit liikkua cd -toiminnolla, ja palataksesi kohtaan XX teet vain popd riippumatta siitä, kuinka ”kaukana” olet hakemistopuu (voi hypätä usean tason yli, sivuttain jne.). Erityisen hyödyllinen bash-skripteissä.

Kommentit

  • Luulen, että tätä ominaisuutta käytän useimmiten. Koska pushd / popd toimii itsenäisesti cd, voit käyttää niitä vakaampana kirjanmerkki kuin cd -.
  • minulle tämä ei ole totta. Joka kerta, kun käytän CD-levyä, pino muuttuu.
  • Voi niin paljon oli zsh: n käyttöä, kun vaihdan bashiin, se toimii hyvin
  • Tämä on ainoa sisällöllinen vastaus vertailun suhteen CD: llä -, IMO. Onko pushd foo; < satunnainen suora muutos >; popd on kannattavampi kuin a = foo; cd $ a; < satunnainen suora muutos >; cd $ a … Skriptejä varten näen pienen syntaktisen mukavuuden ensimmäisessä (pushd), mutta massiivinen parannus jälkimmäisessä ([nimenomaiset] muuttujat!). Luulen, että vuorovaikutteista istuntoa varten hakemistohierarkiani on ensin järjestetty oikein, ja jos eksyin, vain cd ~ / back / to / ilms / path.
  • @HarendraSingh don don ’ Onko satunnaisesti asetettu AUTO_PUSHD? Se saa cd käyttäytymään kuten pushd, poistaa sen käytöstä ja ’ palaat takaisin ” normaali käyttäytyminen ”.

vastaus

pushd ja popd antavat sinun käsitellä pinon hakemistoja.

Kun pushd on hakemisto, laitat nykyisen hakemiston pinoon ja vaihdat hakemistoksi parametriksi määritetyn.

popd avulla voit palata pinon hakemistoon.

For bash , periaatteessa: CD: n käyttämisen sijaan muuta hakemistoja pushd -toiminnolla. Käytännössä: vierailtujen hakemistojen historia tallennetaan (oikein: pinottu), ja niiden välillä voi vaihtaa:

pushd /home; pushd /var; pushd log 

Jos haluat nähdä pinon, käytä dirs ja navigoinnin helpottamiseksi (” pino-merkintöjen numeroiden saamiseksi / p>

dirs -v 

Tulos:

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

Käytä nyt näitä numeroita cd ja ~ kuten:

cd ~1 

Mutta nämä numerot järjestetään nyt uudelleen ja niiden sijainti ” 0 ” muuttuu, joten vain pushd hakemisto yläasemaan kahdesti (tai käytä nuken asennossa 0), kuten:

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

Nyt 1..3 säilyttää asemansa

(Nykyisen hakemiston vapauttaminen pino / poistamalla se historiasta, käytä popd)

Vastaa

Pushd / popd on niin yksinkertainen käsite, jonka ymmärtäminen kesti jonkin aikaa, koska ihmiset yleensä opettavat sitä määrittelemällä nämä komennot komennoiksi, jotka” manipuloivat hakemistopinoa ”, mikä on mielestäni hyvin hämmentävää.

Katson sitä eri tavalla:

pushd [kansion_nimi] – cd hakemistoon [kansion_nimi] ja asiakirja määränpää, joka on [kansion_nimi] hakemistopinossa, samalla kun ylin hakemisto pinossa on aina nykyinen hakemistosi olet

popd – ensin cd sinut sisään pinon päällä oleva hakemistotietue ja poista sitten dokumentaatio (poista se dir-pinosta)

dirs – Tulostaa dir-pinon (voidaan käsitellä dir Db: nä, jossa vasemmalla oleva merkintä on nykyinen hakemisto (pinon yläosa)

Joten 2 suosituinta käyttötapausta ovat:

Käyttötapaus 1: Navigointi käyttäen pushd- ja popd-tiedostoja

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 

Sanotaan ”s” Tein yllä mainitut, koska haluaisin palata takaisin dokumentoimiini kansioihin!

Huomaa, että jos käsin levyn, vaikuttan ylimmän dir-pinon merkintään (joka on aina nykyinen hakemisto)

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$ 

Selatkaa nyt taaksepäin:

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 

Voin jälleen dokumentoida haluamasi dir ja siirry sitten manuaalisesti toiseen hakemistoon, niin voin helposti palata pinoan lisättyyn dokumentoituun hakemistoon.

Käyttötapaus 2: Navigointi numeerisen pinoindeksin avulla

Sanotaan, että työnsin käyttäen pushd dir4 dir3 dir2 dir1, nyt käynnissä oleva dir -v näyttää:

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 

Nyt voit tehdä minkä tahansa Linux-operaation, johon liittyy hakemistoja, pinoindeksin avulla:

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 

Voit jopa poistaa tietyn merkintä dir-pinosta:

root@mypc:/main$ popd ~4 

Toivon, että sanojen ”dokumentointi” käyttö tai ajattelu dir-pinosta, koska jonkinlainen Db yksinkertaistaa käsite!

Vastaa

Yksinkertaisesti sanottuna – kun sinun on navigoitava yli kahden hakemiston välillä, yleensä useita kertoja takaisin & eteenpäin, koska cd - ei juuri leikannut sitä millään muulla kuin 2 kansiolla.

Joten esimerkiksi Sen sijaan, että yrität keksiä aiempia pitkiä polkuja katsomalla puskurisi historiaa tai täyttämällä pitkän reitin sarkaimella, yksinkertaisesti pinot tärkeät ylös ja tarvittaessa siirryt niihin mukavasti yksinomaan niiden lukumäärällä. Monimutkaisten hakemistorakenteiden ja pitkien polkujen välillä vaihtamisesta tulee liukas ja nopea.

Sisäisten sisäänrakennusten avulla voit myös tilata pinon uudelleen tai avata hakemistot, joita et enää tarvitse, mikä sallii joustavuuden työnkulussa.

Hakemistojen pinoamista voidaan käyttää komentosarjoissa samalla tavoin useissa hakemistoissa.

Vastaa

I piti dirs / popd / pushd: n käyttöä hieman epämukavaksi. Keksin henkilökohtaisen ratkaisuni tcsh: ssä lisäämällä seuraavan koodin .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*" 

tällä tavoin aliasin esimerkiksi ”s.” tallentamaan nykyisen työhakemiston tiedostoon ~ / .mydir. ja ”cd.” palauttamaan kyseisen dir aina ja milloin haluan. ”del” poistaa vastaavan tiedoston; ”koti” asettaa dir-osoitteen kotihakemistoon (vastaa cd: tä; s.); ”cdl” listaa tallennetut kansiot. Huomaa, että jos käytät ~ / Dropbox / .mydir $ b (tai muuta pilvipalvelua, kuten esim. ownCloud) ~ / .mydir $ b: n sijaan saat älykkään tavan käyttää haluamiasi diriä eri tileillä ja koneilla.

Vastaa

cd ja cd - avulla voit vaihtaa vain kahden viimeksi käyttämäsi hakemiston välillä. ”Hakemiston työryhmän” koko on kaksi.

Käyttämällä pushd voit pitää mielivaltaisen määrän hakemistoja työryhmässäsi.

Käytän suurimman osan ajasta pushd kuin cd. Kun olet rakentanut pinon aktiivisia hakemistoja hakemistolla pushd directory_name, voit sitten hypätä niiden välillä koko päivän pushd ~#.

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. 

Käytän popd harvoin vain silloin, kun haluan poistaa hakemiston pinosta, kun tiedän, että olen valmis kyseisen hakemiston avulla.

Siirry hakemistoon ja poista se pinosta:

popd ~2 

Pysy nykyisessä hakemistossa ja poista toinen hakemisto pino:

popd +2 

Päätät työskentelytyyliin, joka on samanlainen kuin useita pääteikkunoita tai -välilehtiä (yksi jokaiselle hakemistolle, jossa olet aktiivisesti) mutta kaikki yhdessä terminaalissa.Tämä säästää näytön kiinteistöjä, ja koska hakemistopolut ovat kaikki käytettävissä yhdessä kuoressa, voit tehdä esimerkiksi seuraavia asioita:

  • kopioida tiedostoja hakemistojen välillä, joiden kanssa työskentelet
  • tarkastele tai muokkaa tiedostoja toisessa hakemistossa menemättä sinne

Esimerkkejä:

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

Kohdassa tcsh (mutta ei bash), voit jopa tallentaa hakemistopinon tiedostoon ja palauttaa sen myöhemmin.

Tallenna:

dirs -S ~/dirstack 

Palauta:

dirs -L ~/dirstack 

Korvaa muuten vain ~ bash -esimerkkeissä, joissa on = käytettäväksi tcsh.

pushd =2 popd =4 popd +1 

vastaus

Käytän sitä tällä tavoin bash_profile- ja .bashrc-tiedostoissani näin

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 

se auttaa Siirry hakemistojen välillä viimeisimpään päätelaitteessani käytettyyn hakemistoon. 🙂 Toivottavasti se auttaa sinua käyttämään pikhd-pikanäppäintä, käytän cd ~ stackednumber

Vastaa

Sähköpostiosoitettasi ei julkaista. Pakolliset kentät on merkitty *