Vilka är de praktiska användningsområdena för både pushd
och popd
när det finns en fördel med att använda dessa två kommandon över cd
och cd -
?
REDIGERA : Jag letar efter några praktiska exempel på användningar för båda dessa kommandon eller skäl för att hålla stacken med kataloger (när du har fullbordat fliken, cd -
, alias för att förkorta cd ..
, etc.).
Svar
pushd
, popd
och dirs
är skalinbyggda som låter dig manipulera katalogstack . Detta kan användas för att ändra kataloger men återvända till den katalog som du kom från.
Till exempel
starta med följande kataloger:
$ pwd /home/saml/somedir $ ls dir1 dir2 dir3
pushd to dir1
$ pushd dir1 ~/somedir/dir1 ~/somedir $ dirs ~/somedir/dir1 ~/somedir
dirs
-kommandot bekräftar att vi har två kataloger på stacken nu. dir1
och originaldir, somedir
. OBS: Vår ” nuvarande ” katalog är ~/somedir/dir1
.
pushd till ../dir3 (eftersom vi är inne i dir1
nu)
$ pushd ../dir3 ~/somedir/dir3 ~/somedir/dir1 ~/somedir $ dirs ~/somedir/dir3 ~/somedir/dir1 ~/somedir $ pwd /home/saml/somedir/dir3
dirs
visar att vi har 3 kataloger i stacken nu. dir3
, dir1
och somedir
. Lägg märke till riktningen. Varje ny katalog läggs till vänster. När vi börjar poppa kataloger av, de kommer också från vänster.
Ändra kataloger manuellt till ../dir2
$ cd ../dir2 $ pwd /home/saml/somedir/dir2 $ dirs ~/somedir/dir2 ~/somedir/dir1 ~/somedir
Börja nu poppa kataloger
$ popd ~/somedir/dir1 ~/somedir $ pwd /home/saml/somedir/dir1
Lägg märke till att vi poppade tillbaka till dir1
.
Pop igen …
$ popd ~/somedir $ pwd /home/saml/somedir
Och vi är tillbaka dit vi började, somedir
.
Kan bli lite förvirrande, men huvudet på stac k är katalogen som du för närvarande finns i. Därför när vi kommer tillbaka till somedir
, även om dirs
visar detta:
$ dirs ~/somedir
Vår stack är faktiskt tom.
$ popd bash: popd: directory stack empty
Kommentarer
- Tack, jag förstår helt begreppet stack och hur dessa kommandon fungerar. Jag ’ letar dock efter några praktiska skäl för att hålla stacken med kataloger (när du har fliken slutförd,
cd -
, alias för förkortningcd ..
, etc.). - Jag använder ofta
pushd
&popd
i skript b / c sparar de mig från att behöva komma ihåg var jag kom ifrån, jag kan alltid barapopd
för att komma tillbaka från där jag kom. Jag brukar görapopd >/dev/null 2>&1
för att göra det tyst. Jag använder cd- varje dag i mitt skal. Det finns också några andra tidsbesparande tips i den här artikeln: thegeekstuff.com/2008/10/… . - @Garrett – ingen som jag kan tänka mig.
- @Garrett @slm eftersom
cd -
bara spårar den sista katalogen, jag antar att den skulle kunna ha problem om du ringer till en funktion som också ändrar katalog internt. i så fall kommer funktionen att återställas – till din nuvarande katalog, inte till den katalog du vill hoppa tillbaka till. pushd / popd är den säkraste metoden. Obs: jag har inte ’ testat min teori. - Varför inte gå tillbaka till
~/somedir/dir3
efter den förstapopd
?
Svar
Det finns ett riktigt användbart användningsfall för pushd
och popd
kommandon för att arbeta med flera mappar samtidigt.
Du kan navigera i stacken mycket enkelt eftersom den räknas upp. Det betyder att du kan ha flera arbetsmappar till ditt förfogande under arbetet.
Se ett enkelt exempel nedan.
Låt oss först skapa exempel på mappstruktur.
user@vb:~$ mkdir navigate user@vb:~/navigate$ mkdir dir1 user@vb:~/navigate$ mkdir dir2 user@vb:~/navigate$ mkdir dir3
Sedan kan du lägga till alla dina mappar i stacken :
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å upp det med:
user@vb:~/navigate/dir3$ dirs -v 0 ~/navigate/dir3 1 ~/navigate/dir2 2 ~/navigate/dir1 3 ~/navigate
För att navigera säkert, du måste lägga till den sista (noll) mappen två gånger, eftersom den alltid kommer att skrivas om:
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 hoppa runt genom dessa mappar och arbeta med stapla som med alias för mapparna.Jag antar att följande del är självförklarande:
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
Ytterligare tips är att skapa ett alias för dirs -v
.
Till exempel:
# In ~/.bashrc alias dirs="dirs -v"
Kommentarer
Svar
Ett enkelt användningsfall för att använda dirs stack vad du inte kan göra med bara cd är :
pushd .
lägger till aktuell katalog XX till dirs
stack. Efteråt kan du flytta runt med cd
och för att återvända till XX gör du bara popd
oavsett hur ”långt bort” du befinner dig katalogträdet (kan hoppa över flera nivåer, i sidled etc). Särskilt användbart i bash-skript.
Kommentarer
- Jag tror att det är den funktionen jag utnyttjar oftast. Eftersom
pushd
/popd
fungerar oberoende avcd
kan du använda dem som en mer stabil bokmärke äncd -
. - för mig är detta inte sant. Varje gång jag använder cd ändras min stack.
- Åh det var coz att använda zsh, när jag byter till bash, fungerar det bra
- Detta är det enda innehållssvaret när det gäller en jämförelse med cd -, IMO. Om huruvida pushd foo; < slumpmässig dir-ändring >; popd är mer värdefullt än a = foo; cd $ a; < slumpmässig dir-ändring >; cd $ a … För skript kan jag se en liten syntaktisk bekvämlighet i den förra (pushd), men en massiv förbättring av tydligheten i de senare ([explicita] variablerna!). För en interaktiv session tror jag att jag bara antar att min kataloghierarki är ordnad ordentligt från början, och om jag går vilse helt enkelt cd ~ / tillbaka / till / uppenbar / sökväg.
- @HarendraSingh du don ’ har inte
AUTO_PUSHD
inställt? Det gör attcd
beter sig sompushd
, avmarkerar det och du ’ kommer tillbaka till ” normalt beteende ”.
Svar
pushd
och popd
låter dig manipulera katalogerna på stacken.
När du pushd
en katalog lägger du den aktuella katalogen i stacken och ändrar katalogen till den som anges som parameter.
popd
gör att du kan gå tillbaka till katalogen på stacken.
Om du upprepar kommer kataloggenomgången att vara bevarad och du kan komma tillbaka till de sparade katalogerna i omvänd ordning från vad du sparade dem i.
Svar
För bash , i princip: istället för att använda cd kan man använd pushd
för att byta katalog. Med praktisk användning: historiken för besökta kataloger sparas (korrekt: staplad) och man kan växla mellan dem:
pushd /home; pushd /var; pushd log
För att se stacken använd dirs
och för enklare navigering (för att få numren på ” stack-poster ” använd:
dirs -v
Output:
me@myhost:/home$ dirs -v 0 /home 1 /var 2 /tmp
Använd nu dessa siffror med cd
och ~
som:
cd ~1
Men dessa siffror ordnas nu och placeras ” 0 ” ändras, så bara pushd
katalogen till topposition två gånger (eller använd en dummy på position 0) som:
me@myhost:/home$ dirs -v 0 /home 1 /home 2 /var 3 /tmp
Nu kommer 1..3 att behålla sin position
(För att frigöra den aktuella katalogen från stapeln / ta bort den från historiken, använd popd
)
Svar
Pushd / popd är ett så enkelt koncept som tog mig en stund att förstå eftersom människor tenderar att lära ut det genom att definiera dessa kommandon som kommandon som” manipulerar katalogstacken ”vilket enligt min mening är mycket förvirrande.
Jag tittar på det på ett annat sätt:
pushd [mappnamn] – cd till [mappnamn] och dokumenterar destinationen som är [mappnamn] i en dir-stack medan den översta katalogen i stacken kommer alltid att vara den aktuella dir som du befinner dig i
popd – kommer först att skicka dig till katalogposten som ligger ovanpå stacken och ta bort dokumentationen (ta bort den från dir stacken)
dirs – Skriver ut dir-stacken (kan behandlas som dir Db där posten längst till vänster är den aktuella katalogen (högst upp i stacken)
Så de två mest populära användningsfallen är:
Användningsfall 1: Navigera med pushd och 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
Låt oss säga Jag gjorde ovanstående eftersom jag skulle vilja navigera tillbaka till de mappar som jag dokumenterade!
Observera att om jag manuellt cd, kommer jag att påverka den översta posten för dir stack (som alltid är den aktuella 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$
Låt oss navigera bakåt 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
Återigen kan jag dokumentera vad jag vill och navigera sedan manuellt till en annan dir då kommer jag enkelt att kunna återgå till den dokumenterade dir jag satte in i stacken.
Använd fall 2: Navigera med hjälp av numeriskt stackindex
Låt oss säga att jag tryckte med pushd dir4 dir3 dir2 dir1, nu kör dir -v kommer att visa:
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 utföra alla Linux-operationer som involverar kataloger med stackindex:
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 till och med radera en specifik post från dir stacken:
root@mypc:/main$ popd ~4
Hoppas att använda orden ”dokumentera” eller tänka på dir stacken som någon form av Db förenklar konceptet!
Svar
Enkelt uttryckt – när du behöver navigera mellan mer än två kataloger, vanligtvis flera gånger tillbaka & framåt, eftersom cd -
bara inte klippte den med något utöver två mappar.
Så till exempel istället för att försöka återkomma med tidigare långa banor genom att titta på din bufferthistorik eller genom att fylla i en lång väg, staplar du helt enkelt de viktiga och om det behövs flyttar du enkelt till dem med deras nummer ensamt. Att rotera mellan komplexa katalogstrukturer och långa banor blir smidigt och snabbt.
Med de inbyggda kan du också ordna om stacken eller visa de kataloger som du inte behöver längre, vilket ger flexibilitet i ditt arbetsflöde.
Katalogstapling kan också användas i skript på samma sätt för operationer som spänner över flera kataloger.
Svar
I tyckte att användningen av dirs / popd / pushd var lite obekväm. Jag kom fram till min personliga lösning i tcsh, genom att lägga till följande kod 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å det här sättet aliasade jag till exempel ”s.” för att spara den nuvarande arbetsdir i filen ~ / .mydir. och ”cd.” för att återställa den dir när och var jag vill. ”del.” tar bort motsvarande fil; ”hem.” ställer in dir till hem-dir (motsvarar cd; s.); ”cdl” listar vad som är sparade dir. Observera att om du använder ~ / Dropbox / .mydir $ b (eller någon annan molntjänst som t.ex. ownCloud) istället för ~ / .mydir $ b får du ett smart sätt för att använda dina önskade dirs över olika konton och maskiner.
Svara
Använda cd
och cd -
låter dig växla mellan endast dina två senast använda kataloger. Din ”katalogsats” -storlek är två.
Med hjälp av pushd
kan du behålla ett godtyckligt stort antal kataloger i din arbetsuppsättning.
Jag använder pushd
för det mesta istället för cd
. När du väl har byggt upp en stapel aktiva kataloger med pushd directory_name
kan du sedan hoppa mellan dem hela 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.
Jag använder popd
sällan, bara när jag vill ta bort en katalog från stacken när jag vet att jag är klar använder den katalogen.
Gå till katalogen och ta bort den från stacken:
popd ~2
Håll dig i aktuell katalog och ta bort en annan katalog från stack:
popd +2
Du får en arbetsstil som liknar att ha flera terminalfönster eller flikar öppna (en för varje katalog där du aktivt är fungerar), men allt i en terminal.Detta sparar skärmfastigheter, plus eftersom katalogvägarna alla är tillgängliga i ett skal kan du göra saker som:
- kopiera filer mellan kataloger som du för närvarande arbetar med
- visa eller redigera filer i en annan katalog utan att gå dit
Exempel:
cp ~2/myfile.txt ~4 less ~2/myfile.txt
I tcsh
(men inte bash
), du kan till och med spara din katalogstack i en fil och återställa den senare.
Spara:
dirs -S ~/dirstack
Återställ:
dirs -L ~/dirstack
Annars ersätter du bara ~
i bash
exempel med =
för användning i tcsh
.
pushd =2 popd =4 popd +1
Svar
Jag använder den så här i min bash_profile och .bashrc så här
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 hoppa mellan kataloger till det senaste som används på min terminal. 🙂 Hoppas det hjälper dig att använda pushd snarare popd jag använder cd ~ stackednumber
dirs -c