Ich bin auf Arch Linux und wenn ich einen neuen Terminal-Tab öffne, geht es immer zu $HOME
. Wie kann ich dafür sorgen, dass beim Öffnen einer neuen Registerkarte die Shell in dem Verzeichnis geöffnet wird, in dem ich mich zuvor befunden habe?
Ich bin auf Arch Linux und wenn ich einen neuen Terminal-Tab öffne, geht es immer zu $HOME
. Wie kann ich dafür sorgen, dass beim Öffnen einer neuen Registerkarte die Shell in dem Verzeichnis geöffnet wird, in dem ich mich zuvor befunden habe?
Antworten:
Es gibt einen Fehler, der mit diesem Problem zusammenhängt
Alles was Sie tun müssen, ist die folgende Zeile zu Ihrem .bashrc
oder hinzuzufügen .zshrc
:
. /etc/profile.d/vte.sh
Zumindest auf Arch überprüft das Skript, ob Sie entweder bash oder zsh ausführen, und wird beendet, wenn Sie dies nicht tun.
/etc/profile.d/vte.sh
überschreibt die PROMPT_COMMAND
Variable. Um dies zu beheben, können Sie ändern vte.sh
, und der Teil ändern , um mit PROMPT_COMMAND="__vte_prompt_command"
zuPROMPT_COMMAND="${PROMPT_COMMAND};__vte_prompt_command"
.zshrc
. Ich verwende oh-my-zsh und bin mir nicht sicher, ob das damit zusammenhängt.
Könnte auch diese hackige Lösung vom Superuser durchkreuzen:
[This] speichert den aktuellen Ordner nach jedem Befehl in einer Datei (schadet IMO nicht zu sehr) und öffnet ein neues Terminal im gespeicherten aktuellen Ordner.
füge das Folgende zu .zshrc [oder .bashrc ] hinzu
# emulate bash PROMPT_COMMAND (only for zsh)
precmd() { eval "$PROMPT_COMMAND" }
# open new terminal in same dir
PROMPT_COMMAND='pwd > "${HOME}/.cwd"'
[[ -f "${HOME}/.cwd" ]] && cd "$(< ${HOME}/.cwd)"
Beachten Sie, dass Sie sich damit auch in Ihrem zuletzt verwendeten Verzeichnis befinden, wenn Sie ein neues Fenster öffnen .
@swalog hat mich in seinem Kommentar dazu inspiriert , alle unnötigen Teile von zu streichen, vte.sh
während weder die Eingabeaufforderung noch der Titel des Terminals geändert wurden . Beachten Sie, dass ich keinen verwandten Code verwende. zsh
Deshalb habe ich den zsh
verwandten Code entfernt.
# Copyright © 2006 Shaun McCance <shaunm@gnome.org>
# Copyright © 2013 Peter De Wachter <pdewacht@gmail.com>
#
# This program is free software: you can redistribute it and/or modify
# it under the terms of the GNU General Public License as published by
# the Free Software Foundation, either version 3 of the License, or
# (at your option) any later version.
#
# This program is distributed in the hope that it will be useful,
# but WITHOUT ANY WARRANTY; without even the implied warranty of
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
# GNU General Public License for more details.
#
# You should have received a copy of the GNU General Public License
# along with this program. If not, see <http://www.gnu.org/licenses/>.
# 28 Sep 2019: Tukusej’s Sirs modified this by stripping down all unnecessary parts for his usage
# (src: https://unix.stackexchange.com/questions/93476/gnome-terminal-keep-track-of-directory-in-new-tab#comment219157_93477)
# Not an interactive shell?
[[ $- == *i* ]] || return 0
# Not running under vte?
[ "${VTE_VERSION:-0}" -ge 3405 ] || return 0
__vte_urlencode() (
# This is important to make sure string manipulation is handled
# byte-by-byte.
LC_ALL=C
str="$1"
while [ -n "$str" ]; do
safe="${str%%[!a-zA-Z0-9/:_\.\-\!\'\(\)~]*}"
printf "%s" "$safe"
str="${str#"$safe"}"
if [ -n "$str" ]; then
printf "%%%02X" "'$str"
str="${str#?}"
fi
done
)
__vte_prompt_command() {
local command=$(HISTTIMEFORMAT= history 1 | sed 's/^ *[0-9]\+ *//')
command="${command//;/ }"
local pwd='~'
printf "\033]7;file://%s%s\007" "${HOSTNAME:-}" "$(__vte_urlencode "${PWD}")"
}
case "$TERM" in
xterm*|vte*)
[ -n "$BASH_VERSION" ] && PROMPT_COMMAND="${PROMPT_COMMAND};__vte_prompt_command"
;;
esac
export PROMPT_COMMAND=...
, wenn so etwas bereits in Ihrem existiert.bashrc
.