Hoe gebruik ik pushd- en popd-opdrachten?

Wat zijn de praktische toepassingen van pushd en popd wanneer het gebruik van deze twee opdrachten een voordeel heeft boven cd en cd -?

BEWERKEN : ik” ben op zoek naar enkele praktische voorbeelden van het gebruik van beide commandos of redenen om de stapel met mappen bij te houden (als je tabaanvulling hebt, cd -, aliassen voor het inkorten van cd .., etc.).

Antwoord

pushd , popd , en dirs zijn ingebouwde shell staat je toe de directory-stack te manipuleren. Dit kan worden gebruikt om van directory te veranderen, maar terug te keren naar de directory waar je vandaan kwam.

Bijvoorbeeld

start op met de volgende mappen:

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

pushd naar dir1

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

dirs commando bevestigt dat we nu 2 mappen op de stapel hebben. dir1 en de originele map, somedir. OPMERKING: Onze ” huidige ” directory is ~/somedir/dir1.

pushd naar ../dir3 (omdat we “binnen dir1 zitten)

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

dirs laat zien dat we nu 3 mappen in de stapel hebben. dir3, dir1, en somedir. Let op de richting. Elke nieuwe map wordt aan de linkerkant toegevoegd. Wanneer we mappen beginnen te openen uitgeschakeld, komen ze ook van links.

verander de mappen handmatig naar ../dir2

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

Begin nu met het openen van mappen

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

Merk op dat we teruggingen naar dir1.

Pop opnieuw …

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

En we zijn terug waar we begonnen, somedir.

Kan een beetje verwarrend worden, maar het hoofd van de stac k is de directory waarin u zich momenteel bevindt. Wanneer we dus teruggaan naar somedir, ook al laat dirs dit zien:

$ dirs ~/somedir 

Onze stapel is in feite leeg.

$ popd bash: popd: directory stack empty 

Reacties

  • Bedankt, ik begrijp het concept van stack volledig en hoe deze commandos werken. Ik ‘ m echter op zoek naar enkele praktische redenen om de stapel met mappen te behouden (als je tabaanvulling hebt, cd -, aliassen voor het inkorten van cd .., etc.).
  • Ik gebruik vaak pushd & popd in scripts, omdat ze me ervan weerhouden te onthouden waar ik vandaan kwam, ik kan altijd popd om terug te komen waar ik kwam. Ik doe meestal popd >/dev/null 2>&1 om het stil te maken. Ik gebruik cd- elke dag in mijn shell. Er zijn ook enkele andere tijdbesparende tips in dit artikel: thegeekstuff.com/2008/10/… .
  • @Garrett – geen dat ik kan bedenken.
  • @Garrett @slm aangezien cd - alleen de laatste map volgt, ik kan me voorstellen dat het is mogelijk dat u problemen ondervindt als u een functie aanroept die ook intern van directory verandert. in dat geval zou de functie uiteindelijk worden gereset – naar uw huidige map, niet naar de map waarnaar u terug wilt springen. pushd / popd is de veiligste methode. Opmerking: ik heb ‘ t mijn theorie getest.
  • Waarom ga ik niet terug naar ~/somedir/dir3 na de eerste popd?

Antwoord

Er is een erg handig gebruiksscenario voor pushd en popd commandos om met meerdere mappen tegelijk te werken.

U kunt heel gemakkelijk door de stapel navigeren, aangezien deze wordt opgesomd. Dit betekent dat u tijdens het werk over verschillende werkmappen kunt beschikken.

Zie hieronder een eenvoudig voorbeeld.


Laten we eerst een voorbeeldmapstructuur maken.

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

Vervolgens kunt u al uw mappen aan de stapel toevoegen :

 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 

U kunt het opzoeken door:

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

Om veilig te navigeren, u moet de laatste (nul) map twee keer toevoegen, aangezien deze altijd zal worden herschreven:

 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 

Nu kunt u door deze mappen bladeren en werken met stapel zoals bij aliassen voor de mappen.Ik denk dat het volgende deel voor zichzelf spreekt:

 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 

Aanvullende tip is om een alias te maken voor dirs -v.

Bijvoorbeeld:

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

Reacties

  • En je kunt de stapel leegmaken door dirs -c
  • +1 voor geeft eigenlijk enkele praktische voorbeelden. Het ‘ is gemakkelijk te zien wat pushd / popd doet vanaf de man-pagina, maar dirs en cd ~ # zijn in eerste instantie niet duidelijk.
  • je zou ook kunnen gebruiken een oplossing zoals fasd voor dit soort workflow, maar
  • @Jun, er is ‘ s ” mkdir dir {1,2,3} ” om 3 mappen in één keer te maken.
  • @JunMurakami dit maakte mijn jaar goed! Gelukkig 2020!

Answer

Een eenvoudige use case voor het gebruik van dirs stack, wat je niet kunt doen met alleen cd is :

pushd . voegt huidige directory XX toe aan dirs stack. Daarna kunt u zich verplaatsen met cd, en om terug te keren naar XX hoeft u alleen maar popd te doen, ongeacht hoe “ver weg” u zich bevindt de mappenboom (kan over meerdere niveaus springen, zijwaarts enz.). Vooral handig in bash-scripts.

Reacties

  • Ik denk dat dit de functie is waar ik het vaakst gebruik van maak. Omdat pushd / popd onafhankelijk werken van cd, kunt u ze gebruiken als een stabielere bladwijzer dan cd -.
  • voor mij is dit niet waar. Elke keer dat ik cd gebruik, verandert mijn stack.
  • oh dat kwam door het gebruik van zsh, wanneer ik naar bash verander, werkt het prima
  • Dit is het enige inhoudelijke antwoord wat betreft een vergelijking met cd -, IMO. Of pushd foo; < willekeurige map wijzigen >; popd is meer de moeite waard dan a = foo; cd $ a; < willekeurige map wijzigen >; cd $ a … Voor scripts zie ik een klein syntactisch gemak in de eerste (pushd), maar een enorme verbetering in duidelijkheid in de laatste ([expliciete] variabelen!). Voor een interactieve sessie denk ik dat ik gewoon zou aannemen dat mijn directoryhiërarchie in de eerste plaats goed is georganiseerd, en als ik verdwaald ben, gewoon cd ~ / terug / naar / voor de hand liggend / pad.
  • @HarendraSingh je don ‘ Is AUTO_PUSHD niet ingesteld? Het zorgt ervoor dat cd zich gedraagt als pushd, zet het uit en je ‘ keert terug naar ” normaal gedrag “.

Antwoord

pushd en popd staan je toe om de mappen op de stapel te manipuleren.

Wanneer u pushd een directory gebruikt, plaatst u de huidige directory op de stapel en wijzigt u de directory in de directory die is opgegeven als parameter.

popd stelt u in staat terug te gaan naar de directory op de stapel.

Als je herhaalt, wordt het doorlopen van de directory min of meer bewaard en kun je teruggaan naar de opgeslagen directories in omgekeerde volgorde van waarin je ze hebt opgeslagen.

Antwoord

Voor bash , in feite: in plaats van cd te gebruiken gebruik pushd om van directory te veranderen. Met praktisch gebruik: de geschiedenis van de bezochte mappen wordt bewaard (correct: gestapeld) en men kan ertussen wisselen:

pushd /home; pushd /var; pushd log 

Om de stapel te zien, gebruik dirs en voor eenvoudigere navigatie (om de nummers van de ” stack-items ” te gebruiken:

dirs -v 

Uitvoer:

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

Gebruik deze nummers nu met cd en ~ zoals:

cd ~1 

Maar deze nummers zijn nu herschikt en positioneren ” 0 ” zal veranderen, dus pushd de directory twee keer naar de bovenste positie (of gebruik een dummy op positie 0) zoals:

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

Nu zal 1..3 hun positie behouden

(om de huidige directory vrij te geven van de stapel / verwijder het uit de geschiedenis, gebruik popd)

Antwoord

De pushd / popd is zon eenvoudig concept dat me wat tijd kostte om te begrijpen, aangezien mensen de neiging hebben het te leren door deze commandos te definiëren als commandos die” de directory-stack manipuleren “, wat naar mijn mening erg verwarrend is.

Ik bekijk het op een andere manier:

pushd [folder_name] – zal cd naar [mapnaam] en documenteren de bestemming die [mapnaam] is in een map terwijl de bovenste map in de stapel zal altijd de huidige map zijn waarin u zich bevindt

popd – zal u eerst naar het directoryrecord dat zich bovenaan de stapel bevindt en verwijder de documentatie (verwijder het uit de mapmap)

mappen – Zal de dir-stapel afdrukken (kan worden behandeld als de dir-Db waarbij de meest linkse invoer de huidige directory is (bovenaan de stapel)

Dus de 2 meest populaire use-cases zijn:

Use case 1: Navigeren met pushd en popd

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 

Laten we zeggen Ik heb het bovenstaande gedaan omdat ik terug zou willen navigeren naar de mappen die ik heb gedocumenteerd!

Merk op dat als ik handmatig cd, ik de bovenste map in de map zal beïnvloeden (die altijd de huidige map is)

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$ 

Laten we nu achteruit navigeren:

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 

Nogmaals, ik kan elke map documenteren die ik wil en dan handmatig naar een andere map navigeren, dan kan ik gemakkelijk terugkeren naar de gedocumenteerde map die ik in de stapel heb ingevoegd.

Use case 2: Navigeren met numerieke stapelindex

Laten we zeggen dat ik heb gepusht met pushd dir4 dir3 dir2 dir1, nu draait dir -v het volgende:

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 

Nu kun je elke Linux-bewerking uitvoeren waarbij directorys de stack-index gebruiken:

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 

Je kunt zelfs een specifieke invoer uit de dir-stack:

root@mypc:/main$ popd ~4 

Hoop dat het gebruik van de woorden “documenteren” of denk aan de dir-stack als een soort Db vereenvoudigt het concept!

Answer

Simpel gezegd – wanneer u tussen meer dan 2 mappen moet navigeren, meestal meerdere keren terug & vooruit, aangezien cd - het gewoon niet zal knippen met iets anders dan 2 mappen.

Dus, bijvoorbeeld, in plaats van te proberen opnieuw te komen met vorige lange paden door naar de geschiedenis van je buffer te kijken of door een lange weg af te ronden, stapel je eenvoudig de belangrijke op en indien nodig ga je er gemakkelijk naar toe op basis van hun nummer alleen. Roteren tussen complexe mappenstructuren en lange paden wordt glad en snel.

De ingebouwde functies stellen je ook in staat om de stapel opnieuw te ordenen of de mappen die je niet meer nodig hebt eruit te halen, waardoor je flexibiliteit in je werkstroom krijgt.

Het stapelen van mappen kan ook worden gebruikt in scripts op dezelfde manier voor bewerkingen die zich uitstrekken over verschillende mappen.

Antwoord

I vond het gebruik van dirs / popd / pushd een beetje ongemakkelijk. Ik kwam met mijn persoonlijke oplossing in tcsh, door de volgende code toe te voegen aan .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*" 

op deze manier heb ik bijvoorbeeld een alias gegeven aan “p.” om de huidige werkende map op te slaan in bestand ~ / .mydir. en “cd.” om die map te herstellen waar en wanneer ik maar wil. “del.” verwijdert het overeenkomstige bestand; “home.” stelt de map in op de map home (gelijk aan cd; p.); “cdl” geeft een overzicht van de opgeslagen mappen. Merk op dat als u ~ / Dropbox / .mydir $ b (of een andere cloudservice zoals eg ownCloud) in plaats van ~ / .mydir $ b krijg je een slimme manier om uw favoriete mappen te gebruiken voor verschillende accounts en machines.

Antwoord

Met cd en cd - stelt u in staat om te schakelen tussen alleen uw twee meest recent gebruikte mappen. De grootte van uw “directory-werkset” is twee.

Met pushd kunt u een willekeurig groot aantal directories in uw werkset behouden.

Ik gebruik meestal pushd in plaats van cd. Zodra u “een stapel actieve mappen heeft opgebouwd met pushd directory_name, kunt u er de hele dag tussen schakelen met 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. 

Ik gebruik popd zelden, alleen als ik een directory van de stapel wil verwijderen als ik weet dat ik klaar ben gebruik die map.

Ga naar de map en verwijder deze uit de stapel:

popd ~2 

Blijf in de huidige map en verwijder een andere map uit de stack:

popd +2 

Je krijgt een werkstijl die lijkt op het hebben van meerdere terminalvensters of tabbladen open (één voor elke directory waarin je actief bent) werken), maar allemaal in één terminal.Dit bespaart schermruimte, en omdat de mappaden allemaal in één shell beschikbaar zijn, kunt u dingen doen als:

  • bestanden kopiëren tussen mappen waarmee u momenteel werkt
  • bekijk of bewerk bestanden in een andere directory zonder daarheen te gaan

Voorbeelden:

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

In tcsh (maar niet bash), je kunt zelfs je mappenstapel opslaan in een bestand en het later herstellen.

Opslaan:

dirs -S ~/dirstack 

Herstel:

dirs -L ~/dirstack 

Vervang anders gewoon ~ in de bash voorbeelden met = voor gebruik in tcsh.

pushd =2 popd =4 popd +1 

Antwoord

Ik gebruik het zo in mijn bash_profile en .bashrc op deze manier

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 

het helpt s ik spring tussen mappen naar de meest recente die op mijn terminal zijn gebruikt. 🙂 Ik hoop dat het je helpt om pushd te gebruiken in plaats van popd ik gebruik cd ~ stackednumber

Geef een reactie

Het e-mailadres wordt niet gepubliceerd. Vereiste velden zijn gemarkeerd met *