
我曾經在 gnome-terminal 中開啟新分頁時保留我的工作目錄,並希望恢復此功能。我的研究指出我/etc/profile.d/vte.sh
在我的(我使用 Z shell)中進行採購~/.zshrc
,但這並沒有改變問題,我的新選項卡仍然在~
.
我怎麼才能恢復這個功能?如果有必要的話,這可能是個骯髒的駭客行為。
我的版本
~$ uname -a
Linux konradslaptop2 3.17.2-1-ARCH #1 SMP PREEMPT Thu Oct 30 20:49:39 CET 2014 x86_64 GNU/Linux
~$ gnome-terminal --version
GNOME-Terminal 3.14.2
~$ zsh --version
zsh 5.0.7 (x86_64-unknown-linux-gnu)
我的 ~/.zshrc (最小範例)
. /etc/profile.d/vte.sh
# auto generated by .zsh installation
if (( ${+terminfo[smkx]} )) && (( ${+terminfo[rmkx]} )); then
function zle-line-init () {
printf '%s' "${terminfo[smkx]}"
}
function zle-line-finish () {
printf '%s' "${terminfo[rmkx]}"
}
zle -N zle-line-init
zle -N zle-line-finish
fi
答案1
對您而言,一個非常簡單的解決方法是在您的檔案中包含一個函數~/.zshrc
,該函數會記住工作目錄並在開啟 zsh 時對其進行更改:
cd $(<>/dev/shm/$USER-pwd)
__cd(){
\cd "$@"
pwd >/dev/shm/$USER-pwd
}
alias cd=__cd
我們用/dev/shm代替/tmp以避免磁碟寫入,儘管/tmp可能已經是一個臨時檔案系統在您的系統上。\cd
用於避免叉子炸彈。
如果您只想在 gnome-terminal 中使用此功能,則可以包含 if 語句來檢查目前終端或活動視窗。另外,如果您擔心其他使用者可能會發現您的最後一個目錄是什麼,您可以修改權限$USER-pwd
:chmod
if xprop -id $(xprop -root 32x ' $0' _NET_ACTIVE_WINDOW | awk '{print $NF}') WM_CLASS | grep -q gnome-terminal; then
cd $(<>/dev/shm/$USER-pwd)
chmod 600 /dev/shm/$USER-pwd
__cd(){
\cd "$@"
pwd >/dev/shm/$USER-pwd
}
alias cd=__cd
fi
答案2
我不確定你到底想恢復什麼(見下文);
如果您想gnome-terminal
從不同的目錄開始打開,可以使用指定目錄的選項:
gnome-terminal --working-directory=/tmp
您當然可以使用腳本作為自訂啟動命令,該命令執行cd
, 然後啟動 shell - 但這聽起來不是一個好方法。
如果是關於新選項卡中 shell 的預設目錄被設定為觸發新選項卡操作時當前選項卡的當前目錄:這對我有用,所以我只能給出提示 - 我運行舊版本,GNOME Terminal 3.6.2
.
我很確定這不是/etc/profile.d/vte.sh
設定目錄的腳本;在我的版本中 - 它工作正常 - 腳本不包含與之相關的程式碼,而且我從未使用過它。
終端程式本身可以在分叉 shell 進程之前設定目錄。
但實際上,它甚至不需要這樣做 - 你想要像以前一樣擁有相同的目錄。所需要的只是根本不接觸目錄。
也就是說,有一個錯誤描述了這個問題:
gnome-terminal:錯誤 697475 - 新選項卡未在與上一個選項卡相同的目錄中開啟
討論很長,我沒有總結;vte.sh
在那裡進行了討論,從跳過來看,它看起來可能已修復,但尚未完全發布。
答案3
2022 年更新:
- 包括現在
/etc/profile.d/vte.sh
確實~/.zshrc
有效,但僅適用於新的選項卡,不適合新的視窗 - 下面重複的 @admirabilis 的解決方法曾經有效,但現在使用 Tab 鍵破壞了目錄完成
- 當在 Gnome 終端機中將 zsh 配置為「自訂命令」以及使用 chsh 將 zsh 設為預設 shell 時,上述兩點都是正確的
cd $(<>/dev/shm/$USER-pwd)
__cd(){
\cd "$@"
pwd >/dev/shm/$USER-pwd
}
alias cd=__cd
版本
有趣的是,Gnome Terminal 和 ZSH 的主要版本仍然與 8 年前相同。
~$ uname -a
Linux archlinux 5.19.5-arch1-1 #1 SMP PREEMPT_DYNAMIC Mon, 29 Aug 2022 15:51:05 +0000 x86_64 GNU/Linux
~$ gnome-terminal --version
# GNOME Terminal 3.44.1 using VTE 0.68.0 +BIDI +GNUTLS +ICU +SYSTEMD
~$ zsh --version
zsh 5.9 (x86_64-pc-linux-gnu)