Hvordan bruger jeg pushd- og popd-kommandoer?

Hvad er de praktiske anvendelser af både pushd og popd når der er en fordel ved at bruge disse to kommandoer over cd og cd -?

REDIGER : Jeg leder efter nogle praktiske eksempler på anvendelser til begge disse kommandoer eller grunde til at holde stakken med mapper (når du har færdiggjort fanen, cd -, aliasser til forkortelse af cd .. osv.).

Svar

pushd , popd og dirs er shell-indbyggede giver dig mulighed for at manipulere biblioteksstakken . Dette kan bruges til at ændre mapper, men vende tilbage til den mappe, du kom fra.

For eksempel

start med følgende mapper:

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

pushd to dir1

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

dirs kommando bekræfter, at vi har 2 mapper på stakken nu. dir1 og den originale dir, somedir. BEMÆRK: Vores ” nuværende ” -mappen er ~/somedir/dir1.

pushd til ../dir3 (fordi vi “er inde i dir1 nu)

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

dirs viser, at vi har 3 mapper i stakken nu. dir3, dir1 og somedir. Bemærk retningen. Hver nye mappe føjes til venstre. Når vi begynder at poppe mapper fra, de “kommer også fra venstre.

Skift mapper manuelt til ../dir2

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

Start nu med at poppe mapper

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

Bemærk, at vi kom tilbage til dir1.

Pop igen …

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

Og vi er tilbage, hvor vi startede, somedir.

Kan blive lidt forvirrende, men hovedet på stac k er den mappe, som du er i øjeblikket i. Derfor når vi kommer tilbage til somedir, selvom dirs viser dette:

$ dirs ~/somedir 

Vores stak er faktisk tom.

$ popd bash: popd: directory stack empty 

Kommentarer

  • Tak, jeg forstår helt begrebet stack og hvordan denne kommando fungerer. Jeg ‘ er dog på udkig efter nogle praktiske grunde til at holde stakken med mapper (når du har færdiggjort fanen, cd -, aliaser til afkortning div id = “e670ea3339”>

osv.).

  • Jeg bruger ofte pushd & popd i scripts b / c de redder mig fra at skulle huske, hvor jeg kom fra, jeg kan altid bare popd for at komme tilbage fra hvor jeg kom. Jeg gør normalt popd >/dev/null 2>&1 for at gøre det stille. Jeg bruger cd- hver dag i min skal. Der er også nogle andre tidsbesparende tip i denne artikel: thegeekstuff.com/2008/10/… .
  • @Garrett – ingen som jeg kan blive gravid.
  • @Garrett @slm da cd - kun sporer den sidste mappe, jeg forestiller mig, at det ville være muligt at have problemer, hvis du kalder en funktion, som også skifter bibliotek internt. i så fald vil funktionen ende med at nulstille – til din nuværende mappe, ikke den mappe, du vil springe tilbage til. pushd / popd er den sikreste metode. Bemærk: Jeg har ikke ‘ ikke testet min teori.
  • Hvorfor ikke gå tilbage til ~/somedir/dir3 efter den første popd?
  • Svar

    Der er en virkelig nyttig brugssag til pushd og popd kommandoer til at arbejde med flere mapper samtidigt.

    Du kan navigere i stakken meget let, da den er opregnet. Det betyder, at du kan have flere arbejdsmapper til rådighed under arbejdet.

    Se et simpelt eksempel nedenfor.


    Lad os først oprette eksempelmappestruktur.

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

    Derefter kan du tilføje alle dine mapper til stakken :

     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 

    Du kan slå det op ved:

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

    For at navigere sikkert, du skal tilføje den sidste (nul) mappe to gange, da den altid bliver omskrevet:

     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 kan du hoppe rundt gennem disse mapper og arbejde med stak som med aliaser til mapperne.Jeg antager, at den følgende del er selvforklarende:

     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 

    Ekstra tip er at oprette noget alias til dirs -v.

    For eksempel:

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

    Kommentarer

    • Og du kan rydde stakken ved at dirs -c
    • +1 for faktisk giver nogle praktiske eksempler. ‘ er let at se, hvad pushd / popd gør fra mandsiden, men dirs og cd ~ # er ikke indlysende i starten.
    • Du kan også bruge en løsning som fasd til denne form for arbejdsgang i stedet for, selvom
    • @Jun, der ‘ s ” mkdir dir {1,2,3} ” for at oprette 3 mapper i et skud.
    • @JunMurakami dette gjorde mit år! Glædelig 2020!

    Svar

    En simpel brugssag til at bruge dirs stack, hvad du ikke kan gøre ved bare cd er :

    pushd . tilføjer den aktuelle mappe XX til dirs stack. Bagefter kan du bevæge dig rundt med cd, og for at vende tilbage til XX skal du bare gøre popd uanset hvor “langt væk” du er i katalogtræet (kan springe over flere niveauer, sidelæns osv.). Især nyttigt i bash-scripts.

    Kommentarer

    • Jeg synes, det er den funktion, jeg ofte benytter mig af. Fordi pushd / popd arbejder uafhængigt af cd, kan du bruge dem som en mere stabil bogmærke end cd -.
    • for mig er dette ikke sandt. Hver gang jeg bruger cd, ændres min stak.
    • Åh det var coz af at bruge zsh, når jeg skifter til bash, fungerer det fint
    • Dette er det eneste materielle svar med hensyn til en sammenligning med cd -, IMO. Som om pushd foo; < tilfældig dirændring >; popd er mere værd end a = foo; cd $ a; < tilfældig dirændring >; cd $ a … For scripts kan jeg se en lille syntaktisk bekvemmelighed i førstnævnte (pushd), men en massiv forbedring af klarheden i sidstnævnte ([eksplicit] variabler!). For en interaktiv session tror jeg, jeg bare ville antage, at mit bibliotekshierarki var organiseret ordentligt i første omgang, og hvis jeg gik tabt, skal du blot cd ~ / tilbage / til / åbenbar / sti.
    • @HarendraSingh du don ‘ Er der tilfældigvis AUTO_PUSHD indstillet? Det får cd til at opføre sig som pushd, frakobler det, og du ‘ vender tilbage til ” normal opførsel “.

    Svar

    pushd og popd giver dig mulighed for at manipulere mapperne på stakken.

    Når du pushd en mappe, placerer du den aktuelle mappe på stakken og skifter mappe til den, der er angivet som parameter.

    popd giver dig mulighed for at gå tilbage til biblioteket på stakken.

    Hvis du gentager, bevares bibliotekstrafikken, og du kan vende tilbage til de gemte mapper i omvendt rækkefølge fra det, du gemte dem i.

    Svar

    For bash , dybest set: i stedet for at bruge cd kan man brug pushd til at ændre mapper. Med praktisk anvendelse: historikken for besøgte mapper gemmes (korrekt: stablet), og man kan skifte mellem dem:

    pushd /home; pushd /var; pushd log 

    For at se stakken skal du bruge dirs og for lettere navigation (for at få numrene på ” stack-poster ” brug:

    dirs -v 

    Output:

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

    Brug nu disse tal med cd og ~ som:

    cd ~1 

    Men disse tal omarrangeres nu og placeres ” 0 ” vil ændre sig, så bare pushd biblioteket til den øverste position to gange (eller brug en dummy på position 0) som:

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

    Nu beholder 1..3 deres position

    (For at frigive den aktuelle mappe fra stakken / sletning fra historie, brug popd)

    Svar

    Pushd / popd er et så simpelt koncept, som det tog mig et stykke tid at forstå, da folk har tendens til at lære det ved at definere disse kommandoer som kommandoer, der” manipulerer bibliotekstakken “, som efter min mening er meget forvirrende.

    Jeg ser på det på en anden måde:

    pushd [folder_name] – cd til [mappenavn] og vil dokumentere den destination, der er [mappenavn] i en dir-stak, mens den øverste mappe i stakken vil altid være den aktuelle dir, du er i

    popd – vil først cd dig ind mappeposten, der er oven på stakken, og fjern derefter dokumentationen (fjern den fra dir-stakken)

    dirs – Udskriver dir-stakken (kan behandles som dir Db, hvor posten længst til venstre er den aktuelle mappe (øverst på stakken)

    Så de 2 mest populære brugssager er:

    Brug case 1: Navigering ved hjælp af pushd og 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 

    Lad os sige Jeg gjorde ovenstående, da jeg gerne vil navigere tilbage til de mapper, jeg dokumenterede!

    Bemærk, at hvis jeg manuelt cd, vil jeg påvirke den øverste dir-stakpost (som altid er den aktuelle 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$ 

    Lad os navigere baglæns nu:

    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 

    Igen kan jeg dokumentere hvad jeg vil og naviger derefter manuelt til en anden dir, så vil jeg let kunne vende tilbage til den dokumenterede dir, jeg har indsat i stakken.

    Brug case 2: Navigering ved hjælp af numerisk stakindeks

    Lad os sige, at jeg skubbede ved hjælp af pushd dir4 dir3 dir2 dir1, kører nu dir -v viser:

    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 kan du udføre enhver Linux-handling, der involverer mapper ved hjælp af stakindekset:

    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 

    Du kan endda slette en bestemt indgang fra dir-stakken:

    root@mypc:/main$ popd ~4 

    Håber at bruge ordene “dokumentere” eller tænke på dir-stakken som en slags Db forenkler konceptet!

    Svar

    Kort sagt – når du har brug for at navigere mellem mere end 2 mapper, normalt flere gange tilbage & frem, da cd - netop ikke vil klippe det med noget ud over 2 mapper.

    Så for eksempel i stedet for at forsøge at komme op med tidligere lange stier ved at se på din buffers historie eller ved at udfylde en lang sti, skal du blot stable de vigtige op og om nødvendigt flytte du nemt til dem med deres nummer alene. Rotation mellem komplekse mappestrukturer og lange stier bliver glat og hurtigt.

    De indbyggede giver dig også mulighed for at ombestille stakken eller pope ud de mapper, du ikke længere har brug for, hvilket giver fleksibilitet i dit arbejdsflow.

    Stablering af mapper kan også bruges i scripts på samme måde til operationer, der spænder over flere mapper.

    Svar

    I fandt brugen af dirs / popd / pushd lidt ubehagelig. Jeg kom op med min personlige løsning i tcsh ved at tilføje følgende kode i .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*" 

    på denne måde har jeg f.eks. aliaset “s.” for at gemme den aktuelle arbejdsdir i filen ~ / .mydir. og “cd.” for at gendanne den dir, når og hvor jeg vil. “del.” fjerner den tilsvarende fil; “hjem.” indstiller dir til hjem dir (svarer til cd; s.); “cdl” viser, hvad der er de gemte dirs. Bemærk, at hvis du bruger ~ / Dropbox / .mydir $ b (eller en hvilken som helst anden skytjeneste som f.eks. ownCloud) i stedet for ~ / .mydir $ b får du en smart måde at bruge dine foretrukne dirs på tværs af forskellige konti og maskiner.

    Svar

    Brug cd og cd - giver dig mulighed for kun at skifte mellem dine to senest anvendte mapper. Din “bibliotekets arbejdssæt” -størrelse er to.

    Ved hjælp af pushd kan du gemme et vilkårligt stort antal mapper i dit arbejdssæt.

    Jeg bruger pushd det meste af tiden i stedet for cd. Når du først har opbygget en stak med aktive mapper med pushd directory_name, kan du derefter hoppe mellem dem hele dagen med 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. 

    Jeg bruger sjældent popd, kun når jeg vil fjerne en mappe fra stakken, når jeg ved, at jeg er færdig ved hjælp af denne mappe.

    Gå til biblioteket og fjern den fra stakken:

    popd ~2 

    Bliv i den aktuelle mappe og fjern en anden mappe fra stak:

    popd +2 

    Du ender med en arbejdstil, der svarer til at have flere terminalvinduer eller faner åbne (en for hver mappe, hvor du aktivt er fungerer), men alt i en terminal.Dette sparer fast ejendom på skærmen, plus fordi bibliotekstierne alle er tilgængelige i en skal, kan du gøre ting som:

    • kopiere filer mellem mapper, du arbejder i øjeblikket med
    • få vist eller rediger filer i en anden mappe uden at gå der

    Eksempler:

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

    I tcsh (men ikke bash), du kan endda gemme din biblioteksstak i en fil og gendanne den senere.

    Gem:

    dirs -S ~/dirstack 

    Gendan:

    dirs -L ~/dirstack 

    Ellers skal du bare udskifte ~ i bash eksempler med = til brug i tcsh.

    pushd =2 popd =4 popd +1 

    Svar

    Jeg bruger det sådan i min bash_profile og .bashrc sådan

    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 

    det hjælper s mig springe ind mellem mapper til de seneste anvendte på min terminal. 🙂 Håber det hjælper dig med at bruge pushd snarere popd jeg bruger cd ~ stackednumber

    Skriv et svar

    Din e-mailadresse vil ikke blive publiceret. Krævede felter er markeret med *