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.).
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/… . 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. ~/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
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 afcd
, kan du bruge dem som en mere stabil bogmærke endcd -
. - 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årcd
til at opføre sig sompushd
, 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
dirs -c