Ich verwende einen Fenstermanager für Kacheln und habe von gnome-terminal
mit mehreren Registerkarten zu mehreren urxvt
Instanzen gewechselt, die vom Fenstermanager verwaltet werden. Eine der Funktionen, die ich vermisse, ist die Möglichkeit, ein neues Terminal zu öffnen, das standardmäßig das Arbeitsverzeichnis des letzten Terminals verwendet.
Kurz gesagt: Ich brauche eine Möglichkeit, ein neues urxvt (bash) zu öffnen, das standardmäßig $ PWD des zuletzt verwendeten verwendet.
Die einzige Lösung, die mir in den Sinn kommt, ist, den aktuellen Pfad auf jedem cd
mit so etwas zu speichern :
echo $PWD > ~/.last_dir
und stellen Sie den Pfad auf dem neuen Terminal folgendermaßen wieder her:
cd `cat ~/.last_dir`
Ich kann den zweiten Befehl eingeben, .bashrc
aber ich weiß nicht, wie ich den ersten Befehl bei jedem Verzeichniswechsel ausführen soll :)
Jede einfachere Lösung, die nicht beinhalten screen
oder tmux
Nutzung ist willkommen.
quelle
tabbed
" Perl-Erweiterung vonurxvt
?Antworten:
Ich sehe drei Lösungen mit
.last_dir
. Sie können dieecho $PWD > ~/.last_dir
entweder platzieren:In einer speziellen Funktion wäre das ein Wrapper für
cd
:Legen Sie dies in Ihr
~/.bashrc
und verwenden Sie danncd_
jedes Mal anstelle von cd, wenn Sie möchten, dass Ihr neues Arbeitsverzeichnis gespeichert wird.In Ihrem
$PROMPT_COMMAND
( nicht empfohlen ):Sie können dies direkt vom Terminal aus testen oder in das Terminal stellen
~/.bashrc
. Diese Lösung löst jedoch jedes Mal, wenn die Eingabeaufforderung angezeigt wird, einen Datenträgerschreibvorgang aus, der möglicherweise Probleme verursacht. Auf der anderen Seite wird.last_dir
das aktuelle Verzeichnis angezeigt, unabhängig davon, wie Sie dorthin gelangt sind.In einem benutzerdefinierten Perl-Erweiterungsskript für
rxvt
. Ich habe selbst noch nie eines erstellt, aber im Internet finden Sie einige Beispiele.quelle
PROMPT_COMMAND
eine der am meisten missbrauchten Umgebungsvariablen aller Zeiten zu hacken$PWD
wurde nicht zitiert.) Lassen Sie mich das beheben ... Dort. Das sollte es tun.Ich verwende derzeit diese Version der Lösung Nr. 1
in meinem
.zshrc
quelle
trap "[ -f ~/.last_dir ] && rm ~/.last_dir" EXIT
ich immer bei mir zu Hause anfangen möchte, außer wenn ich einen neuen Tabauto_cd
Funktion von zsh verwendet wird. Es stellt sich heraus, dass wir einen von zsh bereitgestelltenDas ist eigentlich ziemlich trivial; Wenn Sie
urxvt
in Ihrem vorhandenenurxvt
Fenster ausgeführt werden, befindet sich das neue Fenster im selben Verzeichnis. Ich habedup
michurxvt &
aus diesem Grund darauf geeinigt . Wenn Sie möchten, dass es an einen Hotkey gebunden wird, können Sie denbind
Befehl bash verwenden . Zum Beispiel, um es zu binden an F1:quelle
( urxvt & ) &>/dev/null
anstatt nur Hintergrund.Fügen
. /etc/profile.d/vte.sh
Sie einfach Ihre hinzu~/.bashrc
, um die gleiche Funktion zu erhaltenquelle
Natürlich ist es ein funktionierender Ansatz,
cd
das Verhalten zu ändern , aber ich möchte eine einfachere Lösung zeigen. In der man bash (1) habe ich festgestellt, dass eine interaktive Bash ausgeführt wird ,~/.bash_logout
wenn sie existiert. Anstatt also den Pfad bei jedem Aufrufcd
zu speichern, kann der letzte Pfad beim Beenden gespeichert werden.Meine
~/.bash_logout
ist sehr einfach:Und irgendwo in meiner habe
.bashrc
ich diese Zeile platziert:quelle
.bash_logout
nurlogin shells
, dass das nur beim Beenden läuft , das ist nicht immer der Fall.bash
trap "echo $PWD > ~/.lastdir" EXIT"
trap
Ansatz auch schön, ich mag es!Sehr oft verwende ich mehrere Terminalfenster gleichzeitig, in denen sich jeweils mehrere Registerkarten befinden. Beispiel: Ein Fenster für Registerkarten für die Quellcodeentwicklung, ein Fenster für Latexdateien, ein Fenster für die Ausführung und Skripterstellung von R usw. In einem Fenster soll ein neues Terminal mit Registerkarten in das Verzeichnis wechseln, das zuletzt in diesem bestimmten Fenster verwendet wird (Das hat früher funktioniert, aber mit der neuen Gnom-Version irgendwie nicht). Die folgende schmutzige Lösung funktioniert gut für mich. Ich habe dies in .bashrc gestellt.
quelle