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
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 vancd
, kunt u ze gebruiken als een stabielere bladwijzer dancd -
. - 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 datcd
zich gedraagt alspushd
, 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
cd -
, aliassen voor het inkorten vancd ..
, etc.).pushd
&popd
in scripts, omdat ze me ervan weerhouden te onthouden waar ik vandaan kwam, ik kan altijdpopd
om terug te komen waar ik kwam. Ik doe meestalpopd >/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/… .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.~/somedir/dir3
na de eerstepopd
?