Das pushd / popd ist ein so einfaches Konzept, dass ich eine Weile gebraucht habe, um es zu verstehen, da die Leute dazu neigen, es zu lehren, indem sie diese Befehle als Befehle definieren, die "den Verzeichnisstapel manipulieren", was meiner Meinung nach verwirrend ist.
Ich sehe das anders:
pushd [ordnername] - wechselt zu [ordnername] und dokumentiert das Ziel, das [ordnername] in einem Verzeichnisstapel ist, während das oberste Verzeichnis im Stapel immer das aktuelle Verzeichnis ist, in dem Sie sich befinden
popd - führt Sie zuerst in den Verzeichniseintrag, der sich dann oben auf dem Stapel befindet, und entfernt ihn aus dem Stapel
dirs - Gibt den dir-Stack aus (kann als dir-Db behandelt werden, wobei der am weitesten links stehende Eintrag das aktuelle Verzeichnis ist (oben im Stack)
Die 2 beliebtesten Anwendungsfälle sind also:
Anwendungsfall 1: Navigieren mit pushd und 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
Angenommen, ich habe die oben genannten Schritte ausgeführt, da ich zu den von mir dokumentierten Ordnern zurückkehren möchte!
Beachten Sie, dass ich bei einer manuellen CD den obersten Verzeichnis-Stapeleintrag (der immer das aktuelle Verzeichnis ist) beeinflusse.
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$
Lass uns jetzt rückwärts navigieren:
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
Ich kann wieder dokumentieren, was immer ich will, und dann manuell zu einem anderen Verzeichnis navigieren. Dann kann ich problemlos zu dem dokumentierten Verzeichnis zurückkehren, das ich in den Stapel eingefügt habe.
Anwendungsfall 2: Navigieren mit dem numerischen Stapelindex
Nehmen wir an, ich habe mit pushd dir4 dir3 dir2 dir1 gepusht, jetzt zeigt dir -v:
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
Jetzt können Sie jede Linux-Operation ausführen, bei der Verzeichnisse mithilfe des Stapelindexes verwendet werden:
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
Sie können sogar einen bestimmten Eintrag aus dem Verzeichnisstapel löschen:
root@mypc:/main$ popd ~4
Hoffe, dass die Verwendung der Wörter "documenting" oder die Verwendung des Verzeichnisstapels als eine Art Db das Konzept vereinfacht!
cd -
, Aliase für Kürzungencd ..
usw.).