Ich möchte häufig zwischen Verzeichnissen wechseln, die sich in völlig unabhängigen Pfaden befinden, zum Beispiel /Project/Warnest/docs/
und ~/Dropbox/Projects/ds/test/
.
Aber ich möchte nicht die cd /[full-path]/
ganze Zeit tippen . Gibt es Verknüpfungsbefehle zum Wechseln zu zuvor bearbeiteten Verzeichnissen?
Eine Lösung, die ich mir vorstellen könnte, besteht darin, Umgebungsvariablen bash
.profile
für die häufig verwendeten Verzeichnisse und cd
unter Verwendung dieser Variablen zu my hinzuzufügen .
Aber gibt es eine andere Lösung dafür?
bash
shell
command-line
alias
cd-command
saiy2k
quelle
quelle
Antworten:
Wenn Sie nur zwischen zwei Verzeichnissen wechseln, können Sie mit zwischen den Verzeichnissen wechseln
cd -
.quelle
Es gibt eine Shell-Variable
CDPATH
inbash
undksh
undcdpath
inzsh
:So können Sie in Ihrem ~ / .bashrc einstellen:
Dann
cd docs
undcd test
bringt Sie zum ersten gefundenen solchen Verzeichnis. (Ich meine, auch wenn ein Verzeichnis mit dem gleichen Namen im aktuellen Verzeichnis vorhanden sein wird,CDPATH
wird immer noch darauf zugegriffen. WennCDPATH
mehr Verzeichnisse mit Unterverzeichnissen mit dem angegebenen Namen enthalten sind, wird das erste verwendet.)quelle
$CDPATH
sein soll.
(ein expliziter Eintrag, dh:
auch funktioniert). Andernfalls kommt es zu einem merkwürdigen Verhalten, bei demCDPATH
Verzeichnisse im aktuellen Arbeitsverzeichnis Vorrang vor Verzeichnissen haben, was Sie wahrscheinlich nicht möchten.export
. Auf diese WeiseCDPATH
wird nicht in Skripte exportiert, die möglicherweise seltsame oder schädliche Auswirkungen haben. Sehen Sie hier für weitere Diskussionen und Beispiele.cd
verweist das POSIX für darauf.Etwas anderes, das Sie versuchen könnten, ist ein Tool namens Autojump . Es verwaltet eine Datenbank mit Aufrufen zu seinem Alias (
j
standardmäßig) und versucht, intelligente Entscheidungen darüber zu treffen, wohin Sie möchten. Wenn Sie beispielsweise häufig Folgendes eingeben:Sie können Folgendes verwenden, um zur Not dorthin zu gelangen:
Es ist für Debian und Ubuntu verfügbar und wird pro Benutzer
~/.bashrc
oder~/.zshrc
standardmäßig mitgeliefert .quelle
cd -
es praktisch ist zu wissen, ob Sie es bereits wissen, halte ich dies für eine viel bessere Lösung als die aktuelle Top-Antwort.apt-get install autojump
in Ubuntu, aber auch für viele andere, wie auf ihrer Seite dokumentiert) für die systemweite Installation verfügbar, aber jeder Benutzer muss es in seine Shell-Umgebung laden, damit es die CD überschreiben kann, um den Überblick zu behalten wohin du gehstsource /usr/share/autojump/autojump.sh
dass ~ / .bashrc hinzugefügt werden sollte, damit der automatische Sprung funktioniert .Wenn es sich um eine kleine Anzahl von Verzeichnissen handelt, können Sie
pushd
zwischen diesen wechseln:Im Gegensatz dazu
cd -
können Sie dies mit mehr als zwei Verzeichnissen verwendenDem Vorschlag von Noach folgend, verwende ich jetzt Folgendes:
Beispielverwendung:
usw. Offensichtlich dient dies nur zum Drehen durch den Stapel und behandelt nicht das Hinzufügen neuer Pfade - vielleicht sollte ich es umbenennen.
quelle
pushd
undpopd
für die Durchquerung, aber nicht, dass Pushd drehen konnte, was bisher verwendet wurde ...Ich benutze
alias
bashrc, um diese CDs zu machen.sowie:
quelle
~/.bashrc
oder/etc/bash.bashrc
. Ich habe vorher nicht verwendet.profile
, so weiß nicht, die Beziehung zwischen ihnen :-(.bash_profile
und es funktioniert super .. thx :)Ich habe ein Skript gefunden (normalerweise acd_funch.sh), das dieses Problem für mich gelöst hat. Mit dieser Option können
cd --
Sie die letzten 10 von Ihnen verwendeten Verzeichnisse anzeigen. Es sieht ungefähr so aus:Um
~/Music/thirddir
nur zu tippencd -2
Verweise
ANMERKUNG: Dieses Skript wurde ursprünglich in einem Linux-Gazette-Artikel veröffentlicht, der hier verfügbar ist: acd_func.sh - erweitert die bash-CD, um den Verlauf der besuchten Verzeichnisnamen zu speichern, anzuzeigen und darauf zuzugreifen .
quelle
Probieren Sie die
cdable_vars
Shell-Option in bash aus. Sie schalten es mit einshopt -s cdable_vars
.Dann müssen Sie Ihre Variablen einstellen
export dir1=/some/path
. und schließlichcd dir1
, etc. Sie können es dann in Ihr setzen~/.bashrc
, um es haften zu lassen.quelle
Verwenden Sie "pushd -n " (vorausgesetzt, Sie verwenden bash).
Fügen Sie zu Ihrer ~ / .bashrc hinzu:
dann,
cd ~
ist dein Zuhause,cd ~1
ist~/Dropbox/Projects/ds/test/
cd ~2
ist/Project/Warnest/docs/
Sie können verwendet werden
~1
,~2
usw. auf genau die gleiche Art und Weise , wie~
.quelle
Hier gibt es viele gute Vorschläge. Welche Option verwendet werden soll, hängt davon ab, ob Sie eine kleine feste Liste von Verzeichnissen haben, zwischen denen Sie wechseln, oder ob Sie nach einer allgemeineren Lösung suchen.
Wenn es sich um eine kleine feste Liste handelt, ist es am einfachsten, einfache Aliase (wie von Felix Yan vorgeschlagen) einzurichten.
Wenn Sie nach einer allgemeineren Lösung suchen (dh nach vielen verschiedenen Verzeichnissen, die sich im Laufe der Zeit ändern), würde ich pushd und popd verwenden (wie von Useless vorgeschlagen). Ich persönlich finde, dass die Standardeinstellung von pushd / popd schwierig zu verwenden ist, insbesondere, wenn Sie zwischen vielen Ordnern wechseln. Ich habe jedoch ein paar Verbesserungen vorgenommen, die es mir viel einfacher machen. Fügen Sie Ihrem bashrc Folgendes hinzu:
pd
(als Kurzform vonpushd
), um zu einem neuen Ordner zu springen und sich zu erinnern, wo Sie sich befanden.dirs
, um die Liste der gespeicherten Verzeichnisse anzuzeigen.pd 3
zu Verzeichnisnummer 3 springen.Beispiel Verwendung:
quelle
Das Folgende schien in dem Fall zu funktionieren, in dem ich es getestet habe, und Sie können Ihre Verzeichnisnamen einfach als Symlinks in ~ / Bookmarks ablegen:
quelle
function
Linie geht in .bashrc (Sie es in Ihrem Terminal eingeben können zu testen, aber es wird verschwunden sein , wenn Sie das Fenster schließen), bevor die Linien den Testfall von „testdir“ zu einem Namen für einzurichten/tmp
, und die letzte Zeile ist der Test, um zu sehen, ob es funktioniert.Du könntest es schlimmer machen als j2 .
Aus der README:
Ich benutze es ausgiebig und empfehle es.
quelle
Ich würde empfehlen , zsh zu verwenden , diese Shell als sehr gute TAB-Vervollständigung für Verzeichnisse, Dateien und sogar Optionen für die meisten CLI-Programme.
Ich benutze diese Shell seit Jahren und würde die Funktionalität vermissen, wenn sie weg wäre. Das Schreiben von Skripten für zsh macht auch viel Spaß, da eine große Anzahl von Einzeilern Ihnen jeden Tag helfen kann.
quelle
Nach meiner Erfahrung besteht die größte Geschwindigkeit beim Navigieren in einer Shell in der Verwendung der Verlaufssuchfunktion. In Bash können Sie in Ihrem Befehlsverlauf rückwärts suchen, indem Sie
Ctrl
+ drückenR
und ein Muster eingeben . Dieses Muster wird dann mit vorherigen Einträgen in Ihrem Verlauf abgeglichen - es könnencd
Befehle oder andere Operationen sein - und Vorschläge werden während der Eingabe gemacht. Drücken Sie einfach die Eingabetaste, um den vorgeschlagenen Befehl erneut auszuführen. Das heißtreverse-search-history
in Bash und ich liebe es. Das erspart mir viele Tastenanschläge und schont meinen internen Speicher.Es ist eine gute Sache , weil man nur etwas kleinen Teil eines Befehls zu erinnern, wie
Drop
oderWa
zwischen den beiden Historieneinträgen zu unterscheidencd ~/Dropbox/Projects/ds/test/
undcd /Project/Warnest/docs/
.quelle
Ich benutze auch diese Aliase (füge sie zu ~ / .bashrc hinzu):
Es ist viel schneller, mit ihnen in das übergeordnete Verzeichnis zu wechseln (es löst jedoch nur die Hälfte der Navigation).
quelle
Wenn Sie zsh verwenden:
du musst nicht tippen
cd
, tippe einfach den Verzeichnispfad (/foo/bar/baz<Enter>
gleichcd /foo/bar/baz<Enter>
)erfordert
auto_cd
die Einstellung einer OptionTab
key/u/sh/pi<Tab>
erweitern ( erweitert auf/usr/share/pixmaps
; funktioniert auch für Dateinamen)quelle
shopt -s autocd
, es ist also keine reine Zsh-Güte mehr.Es gibt ein ziemlich nettes Tool für schnelle Verzeichnisänderungen:
xd - eXtra fast Directory changer http://xd-home.sourceforge.net/xdman.html
ein wenig umständlich ist , dass man es in der Bash - Profil oder ähnlich , wie es nur eine Karte brauchen gibt das Verzeichnis
Sie können Dinge tun wie:
quelle
f() { cd "$(xd -g "$@")"; }
, um Verzeichnisse und Leerzeichen in den Argumenten in korrekt zu behandelnxd
(der Pfad wird wahrscheinlich nicht benötigt). Wenn Sie niemalsxd
auf andere Weise verwenden, können Sie dies alternativ tunxd() { cd "$(command xd -g "$@")"; }
(alternativ/usr/bin/xd
anstelle von verwendencommand xd
- Sie können immer ausführen,command xd …
wenn Sie es umgehen müssen).Sie sollten niemals den vollständigen Pfad in die Shell eingeben. Sie können immer verwenden:
Anstatt von
quelle
P*
sei denn, Project ist die einzige Datei, die mit P beginnt. Die Tab-Vervollständigung kann zyklisch erfolgen (standardmäßig in den meisten Shells; Sie müssen die Tabsmenu-complete
in Bash neu binden ) und wird in einfachen Fällen sofort aufgelöst Auf so etwas muss man nicht warten/P*/W*/*/mydoc*
klingt, als würde es gut funktionieren, bis du eines Tages zufällig eine andere Datei erstellst, die zu diesem Glob passt, und plötzlich endest du beide gleichzeitig öffnen./u*/*/g++
ist beeindruckend wenige Zeichen, aber hoffentlich ist nichts anderes in einem der Unterordner eines meiner Stammordner beginnend mitu
benanntg++
. (Als netter Kompromiss können Sie in einigen Shells mithilfe der Tabulatortaste die Globs direkt erweitern.)Es gibt auch
OLDPWD
eine Umgebungsvariable, die gemäß IEEE 1003.1 (POSIX) bei jedemcd
Wechsel des Arbeitsverzeichnisses mit dem vorherigen Arbeitsverzeichnis aktualisiert werden sollte (für die Neugierigen Zeile 80244 von Seite 2506 von IEEE 1003.1-2008).quelle
Es gibt auch eine "wcd" -App, die speziell für diesen Zweck erstellt wurde (ebenfalls auf cygwin portiert, da ich daran beteiligt bin). Sie können damit Verknüpfungen und Lesezeichen für Verzeichnisse erstellen. Unterstützt auch Platzhalter. Das Lesen der Manpage und der Dokumente in / usr / share / wcd sollte sehr hilfreich sein.
http://manpages.ubuntu.com/manpages/hardy/man7/wcd.7.html
quelle
cdargs ist das effizienteste Tool zum Speichern von Lesezeichen in einem Verzeichnis: http://www.youtube.com/watch?v=uWB2FIQlzZg
quelle
sudo apt-get cdargs
auf Ubuntu. Übrigens ist das YouTube-Video wirklich schlecht, aber das Tool ist großartig.Try fastcd ( https://github.com/frazenshtein/fastcd ) Setzt einen Hook, der besuchte Verzeichnisse von der Bash aufzeichnet. Und setzt das Skript als "j" -Alias, der Ihnen die zuletzt besuchten Verzeichnisse anzeigt und die Möglichkeit bietet, schnell eine CD zu erstellen (beginnen Sie mit der Eingabe, um Verzeichnisse zu filtern). Es ist eine Änderung von .bashrc erforderlich, um den Alias "j" zu erstellen.
Werkzeug bekommen
Installieren Sie die erforderlichen Module
Quell die set.sh Datei in deinen bashrc
Und aktualisiere bashrc
Dann geben Sie einfach "j" in die Konsole ein
quelle
.bashrc
?Ich hatte die gleiche Frage und fand zuerst diese Antwort . Ich habe das Dienstprogramm z ( https://github.com/rupa/z ) installiert .
Dies ist genau das, wonach Sie suchen, denn z lernt von Ihren CD-Befehlen und verfolgt die Verzeichnisse nach dem Prinzip der Häufigkeit (häufig und aktuell). Nachdem Sie beide CD-Befehle einmal ausgeführt haben, können Sie Folgendes tun:
zu springen
/Project/Warnest/docs/
und~/Dropbox/Projects/ds/test/
sind. Die Argumente für z sind reguläre Ausdrücke, sodass Sie nicht einmal einen vollständigen Ordnernamen eingeben müssen.quelle
Update (2016): Hierfür verwende ich jetzt FASD , das eine Fuzzy-Suche basierend auf Ihren neuesten Verzeichnissen ermöglicht.
Ich habe dafür ein Tool in Ruby erstellt. Sie können YAML-Dateien verwenden, um Ihre Projekte zu deklarieren.
Ich habe hier einen kleinen Artikel darüber geschrieben: http://jrnv.nl/switching-projects-terminal-quickly/
Ich habe auch den Quellcode auf GitHub gepostet: https://github.com/jeroenvisser101/project-switcher
quelle
Ich verwende seit vielen Jahren mein eigenes Dienstprogramm cdhist , um dies zu verwalten. Es wird Ihr cd-Befehl aliasisiert und automatisch ein Verzeichnisstapel erstellt.
quelle
Mit können Sie
export
Ihren Verzeichnispfaden Variablen zuweisen und sie dann referenzieren.quelle
export
Aussagen in Ihre~/.bashrc
, und sie werden immer verfügbar sein.Einige Vorschläge hier:
Ganz direkt, ich werde einen Alias in die .profile-Datei einfügen
Dann benutze
$ dir1
oderdir2
, kann cdWenn Sie immer nur in zwei Richtungen wechseln. Mit
cd -
wird zwischen ihnen gewechselt.quelle
Die Lösung, die ich für diese Situation benutze, ist
screen
. Startbildschirm und für jedes Verzeichnis ein Fenster mit erstellenC-a c
und dorthin navigieren. Wechseln Sie zwischen Fenstern / Verzeichnissen mitC-a n
oderC-a p
. Benennen Sie die Fenster mitC-a A
. Dann können Sie mit eine Liste Ihrer FensterC-a "
öffnen und mit der Fensternummer oder dem Fensternamen navigieren. Da dies derscreen
Fall ist , können Sie sich aus der Sitzung lösen, um Speicherplatz zu sparen und die Verbindung später mit derselben Konfiguration wieder herzustellen.quelle
Es scheint, dass Sie im Grunde genommen eine Projektdatei für Ihren Workflow benötigen. Mit Verzeichnissen, die zu Ihrer Aktivität gehören, wie in einer Programmier-IDE. Probieren Sie Zsh Navigation Tools und das dortige Tool
n-cd
aus. Es ermöglicht Ihnen, durch die zuletzt besuchten Ordner zu navigieren und einHotlist
Verzeichnis Ihrer Wahl zu definieren:n-cd
kann an eine Tastenkombination gebunden werden mit:quelle
TL; DR
Fish
für interaktive Shell , die Sie sofort ermächtigen (fish
>zsh
>bash
).POSIX
/Bash
für Skripting , die die am weitesten unterstützten Syntax ist (POSIX
>Bash
>Zsh
>Fish
).Muscheln
Nachdem ich hier verschiedene Shells getestet habe, ist mein Feedback (in der Reihenfolge des Testens / der Annahme):
Bash
:Zsh
+oh-my-zsh
:cd /e/x1
→cd /etc/X11/
);Fish
+oh-my-fish
(aktuell) ist das Beste aus der Box:Verwenden Sie aussagekräftige Aliase
Jede Shell kann mit
function
und erweitert werdenalias
. Hier sind die, die ich im Zusammenhang mit Ihrem Problem verwende (POSIX-kompatibel):Es gibt einfache, aber wirklich aussagekräftige Funktionen, die sich leicht merken und automatisch vervollständigen lassen.
Kenne deine Muschel
Konfigurieren Sie
CDPATH
Ihre am häufigsten verwendeten Verzeichnisse hinzufügen (zB~/projects/
,/etc/init.d/
) , so dass Sie können , um sie schnell zu springen.Weitere Informationen finden Sie in der Antwort zur Handarbeit
CDPATH
.Hangout und lesen
quelle
exit
, verlassen Sie die interaktive Shell. Diese "aussagekräftigen Aliase" könnten einfach seinalias back='cd -'
undalias up='cd ..'
- aber keine Sorge, diese Befehle werden niemals false zurückgeben (kein vorheriges Verzeichnis - es schickt Sie nach Hause! Bereits im Root-Verzeichnis? Es ist ein No-Op!) Und daher werden Sie niemals beendet . Berücksichtigen Sie auchalias back='cd $OLDPWD'
(beachten Sie die einfachen Anführungszeichen), da es keine Ausgabe hat (cd -
teilt Ihnen mit, wohin es Sie sendet, was wahrscheinlich unnötig ist, da Ihre Eingabeaufforderung diese Informationen enthält)anc
ist ein cmd-Linientool (kurz für anchor), das Lesezeichen für Verzeichnisse speichert. (bisher nur mit bash getestet)In deinem Fall:
Dadurch werden beide Verzeichnisse zur Ankerliste (think bookmarks) hinzugefügt
Jetzt, wenn Sie
/Project/Warnest/docs/
von einem beliebigen Ort Ihres Systemtyps zu einem anderen springen möchten :und wenn du zum Tippen springen willst
~/Dropbox/Projects/ds/test/
:Neben dem Abgleichen von Text mit den mit Lesezeichen versehenen Pfaden bietet anc viele weitere praktische Möglichkeiten, um in Verzeichnissen zu navigieren.
Startet den interaktiven Modus, in dem alle Lesezeichen nach Nummer aufgelistet werden. Sie müssen also nur die Nummer eingeben
Wenn Sie Folgendes eingeben:
Eine Liste mit allen Lesezeichen (in Ihrem Fall beide Lesezeichen) wird angezeigt und Sie können mit den Pfeiltasten aus dieser Liste auswählen. Dies ist eine sehr schnelle und intuitive Methode.
Holen Sie sich auf der Github-Seite des Projekts anc: https://github.com/tobimensch/anc
Es gibt auch eine README-Datei mit Anwendungsbeispielen.
Vollständige Offenlegung: Ich bin der Autor dieses Skripts. Ich hoffe, einige Leute werden es nützlich finden.
quelle