Ist es eine gute Idee, den folgenden Alias zu verwenden:
cd() {
pushd $1;
}
in der Bash?
Ich denke, das wäre sehr nützlich, da ich dann eine Reihe von popd
s anstelle von nur einem verwenden kann cd -
.
Gibt es einen Fall, in dem dies ein Problem sein könnte?
bash
shell
shell-script
alias
Laser
quelle
quelle
alias cd=pushd
?pd
? Sind Sie der einzige Benutzer und Administrator Ihres Systems?autopushd
Antworten:
Persönlich habe ich diese in meinem bashrc und benutze sie die ganze Zeit:
Sie können dann in der Befehlszeile ein wenig wie in einem Browser navigieren.
cd
wechselt das Verzeichnis.back
Wechselt zum vorherigen Verzeichnis, aus dem Sie herausgearbeitet habencd
. Undflip
wechselt zwischen dem aktuellen und dem vorherigen Verzeichnis, ohne sie vom Verzeichnisstapel zu entfernen. Insgesamt funktioniert es super.Das einzige wirkliche Problem, das mir bewusst ist, ist die Tatsache, dass es sich dann um eine Reihe von Befehlen handelt, die ich völlig gewohnt bin, aber auf keinem anderen Computer existieren. Wenn ich also die Maschine einer anderen Person benutzen muss, kann das ein bisschen frustrierend sein. Wenn Sie es gewohnt sind, nur zu verwenden
pushd
undpopd
direkt zu verwenden, haben Sie dieses Problem nicht. Und wenn Sie nur den Alias "cd
nicht" verwendenpopd
, wird das Problem "back
nicht vorhanden" nicht auftreten. Es tritt jedoch immer noch das Problem auf,cd
das auf anderen Computern nicht so gut funktioniert, wie Sie es erwarten.Ich würde jedoch bemerken, dass Ihre besondere Umsetzung von
cd
nicht ganz so funktioniert, wiecd
die normalecd
von sich aus in Ihr Home-Verzeichnis wechselt, aber Ihre nicht. Die Version, die ich hier habe, hat dieses Problem nicht. Meins hängt auchDIRSTACK
auf der Vorderseite desdirs
Ausdrucks, aber das ist mehr eine Frage des persönlichen Geschmacks als alles andere.Wie gesagt, ich benutze diese Aliase die ganze Zeit und habe kein Problem damit. Es kann nur ein bisschen frustrierend sein, eine andere Maschine zu verwenden und sie dann nicht dort zu finden (was nicht verwunderlich sein sollte, aber sie gehören zu den Dingen, die Sie so oft verwenden, dass Sie nicht an sie denken Es kann also immer noch überraschend sein, wenn sie nicht so funktionieren, wie Sie es gewohnt sind.
quelle
<C-o>
topopd
für authentische Erlebnisse konfigurieren .Dies ist keine direkte Antwort auf die Frage, aber ich habe mich in das Verzeichnisverlaufsfenster in 4DOS verliebt. So sehr, dass ich meine eigene Version für Linux (und Cygwin) geschrieben habe. Ich habe noch nie auf so dass es eine leicht zu installierende Dienstprogramm dazu gekommen, aber wenn Sie kennen sich in einer Bash - Eingabeaufforderung, es sollte nicht sein , dass schwer zum Laufen zu bekommen. Ihre Frage hat mich dazu inspiriert, sie in ein Git-Repo zu stellen und auf GitHub: dirhistory hochzuladen .
Grundsätzlich ist es ein Daemon, der Verzeichnisänderungen von all Ihren Shells sammelt, und ein Cdk-Programm, das den Verlauf anzeigt und es Ihnen ermöglicht, jedes Verzeichnis auszuwählen, zu dem Sie wechseln möchten (Sie sind also nicht auf einen Stapel beschränkt). Ich finde es sehr nützlich und habe es an Ctrl-PageUp gebunden, genau wie 4DOS. (Ich habe sogar PuTTY gepatcht, damit es Ctrl-PageUp an Bash sendet.)
quelle
Für mich ist pushd / popd / dirs fast hilfreich, aber es fehlt. Also habe ich einen "Wrapper" erstellt, der "navd" heißt und im Wesentlichen aus 20 Aliasen besteht. (Eine davon ist wirklich eine Funktion.) Der Code ist unten, aber hier ist zuerst eine kurze Erklärung. (Eine nette Sache über "navd" und das Arbeiten auf den Rechnern anderer Leute: Es gibt eine "no-install" -Form, um es auszuführen: Als eine Installationsoption können Sie einfach die Befehle einfügen, die "navd" an der Bash-Eingabeaufforderung implementieren , und für die Dauer dieser Bash-Sitzung auf dieser Maschine funktioniert navd. Das ergibt keinen Footprint im Dateisystem, stellt jedoch eine temporäre Installation dar. Geben Sie diese Befehle für eine "echte" Installation in .bashrc ein, von Kurs.)
Eigenschaften:
Jeder der neunzehn navd <N> -Befehle dreht den Stapel so, dass das Verzeichnis, das zum aktuellen Verzeichnis wird, jetzt auch vorne im Stapel angezeigt wird. Positive <N> -Werte finden eine Richtungszählung von links, wobei die Indizierung bei Null beginnt. Negative <N> -Werte geben ein Verzeichnis an, das von RECHTS aus gezählt wird, wobei die Indizierung bei -1 beginnt. (Dies folgt der Konvention, wie Array-Indizes in Java und anderen Sprachen verwendet werden können.)
Hinweis: Jeder "navd" -Befehl zeigt denselben Stapel an, den "pushd" und "dirs" verwenden - zeigt ihn jedoch OHNE den Eintrag ganz links an , den "dirs" anzeigen würde (da sich dieser Eintrag nicht wirklich im Stapel befindet - es ist Das aktuelle Verzeichnis und mit "dirs" der am weitesten links stehende Eintrag ändern sich, wenn ein CD-Befehl eingegeben wird. (Der Befehl "cd <Pfad>" hat keine Auswirkung auf das Verhalten von navd, obwohl er sich durchaus auf das Verhalten von pushd / dirs / popd auswirkt. Außerdem ... verwende ich "cd -", um einmal zu a "zurückzukehren" Verzeichnis, von dem ich gerade weg navigiert bin, und "cd -" hat auch keinen Einfluss auf das Verhalten von navd.)
Bonus: Es können 19 weitere Aliase vorhanden sein, die den Stapel NICHT drehen, sondern lediglich in die auf dem Stapel angegebene Position wechseln.
2. Bonus: "navh" zeigt navd <path> -Befehle aus dem Verlauf an, um den Stapel einfach mit Ausschneiden und Einfügen zu laden. (Jedes Element wird nur einmal aufgeführt, auch wenn es mehrere Male im Verlauf ist, und die Liste wird sortiert. Außerdem können Einträge in eine $ HOME / .navhignore-Datei eingefügt werden, um zu verhindern, dass genau diese Einträge in der Navigationsliste angezeigt werden.)
Drei wichtige Verhaltensweisen:
Wenn Sie den Stapel löschen und einen bestimmten Befehl "navd <Pfad>" wiederholen, wird dieser Pfad auf dem Stapel gespeichert. Das ist, was ich will und erwarte ... aber pushd macht das nicht - es legt die aktuelle Richtung, in der Sie von dem Stapel weg navigieren, auf den Stapel, so dass der Effekt auf den Stapel variabel ist (sich unvorhersehbar anfühlt), wenn Sie den Befehl wiederholen .
"navd <Pfad>" legt nicht zweimal denselben Pfad auf dem Stapel ab.
"navd <Pfad>" stellt sich selbst dann mit dem absoluten Pfad in den Befehlsverlauf, wenn der relative Pfad für den Befehl eingegeben wurde.
Aufgrund der drei zuletzt beschriebenen Verhaltensweisen ist die Verwendung eines Befehls "navd <Pfad>" aus dem Verlauf viel hilfreicher als die Verwendung eines Befehls "pushd <Pfad>" aus dem Verlauf. Ich kann Geschichte wirklich wiederverwenden, um Orte zu besuchen. Und wenn ich das tue, "verderbe" ich meinen Stapel nicht.
Wenn Sie Ihr Gehirn darum wickeln können und möchten, können Sie zwischen navd und pushd / dirs / popd wechseln. Beide verwenden denselben Stapel. nur mit einem anderen Stil. Verwenden Sie beispielsweise "popd", um Objekte aus dem "navd" -Stapel zu entfernen, oder verwenden Sie "dirs -c", um den navd-Stapel zu löschen.
Stellen Sie sich pushd / dirs / popd als "Wie kann ich meine Schritte zurückverfolgen?" Vor.
Stellen Sie sich navd als "Wie halte ich mich an eine Reihe von Lieblingsverzeichnissen und schalte einfach zwischen diesen um" vor.
Fügen Sie Folgendes in ein Terminalfenster ein, und Sie können navd sofort für die Dauer dieser Terminalsitzung verwenden. Dies ist der gesamte Code für diese Funktion.
Diese Aliase basieren auf "bash" -Befehlen. Es wird besondere Sorgfalt darauf verwendet, das normale Verhalten von "cd -" beizubehalten. (Ich benutze oft "cd -" anstatt mich mit "pushd" oder "navd" zu beschäftigen - weil "cd -" sehr praktisch ist, um zum letzten "Ort" zurückzukehren oder zwischen nur 2 Orten zu wechseln, und Es funktioniert überall ohne Installation.)
Diese Befehle können natürlich für eine dauerhaftere Installation in die .bashrc-Datei eingefügt werden.
quelle
Hier ist noch eine andere Lösung, die Ihnen gefallen könnte. Ich schrieb dies, nachdem ich mit der Lösung von @cjm gespielt hatte. Mit dem Befehl dialog wird aus der Ausgabe von dirs ein Menü vom Typ ncurses erstellt. Wenn Sie ein Element auswählen, wird dieses Verzeichnis an den Anfang des Stapels verschoben und auf CD gespeichert. Dies hat gegenüber dem Verzeichnisverlauf den Vorteil, dass jedem Terminalemulator ein eigener Verzeichnisverlaufspuffer zugewiesen und die Installation ein wenig vereinfacht wird.
So installieren Sie: Sobald Sie die Ausrichtung von cd auf pushd festgelegt haben, installieren Sie das Dialogfeld und fügen Sie diese Funktion in Ihren bashrc ein:
Das gefällt mir ein bisschen besser, als dirs -v auszuführen und dann einen anderen Befehl auszuführen, um das gewünschte Verzeichnis zu öffnen oder eine CD zu erstellen. Dialogmenüs können auch durch ihre Dialogrc in hohem Maße angepasst werden.
Um Ihre Frage zu beantworten: Ja, ich denke, Aliasing von Pushd auf CD ist eine großartige Idee. Es ist unwahrscheinlich, dass Probleme mit dem Pufferüberlauf auftreten, wenn Sie Ihren Computer regelmäßig neu starten, zumindest, um Updates zu erhalten. Allerdings würde ich beim Schreiben von Skripten vorsichtig mit CDs umgehen. cd in einer while-Schleife kann möglicherweise Probleme mit dem Pufferüberlauf verursachen. Ich bin nicht sicher, was die dirs / pushd Puffergröße steuert.
quelle