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ämiseencd ..
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 vainpopd
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äisenpopd
?
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
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äisesticd
, voit käyttää niitä vakaampana kirjanmerkki kuincd -
. - 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 saacd
käyttäytymään kutenpushd
, 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
dirs -c