Bash

如何讓 tmux 告訴 bash 在新打開的視窗中顯示目前目錄的 logical 版本?

  • July 9, 2015

背景

我在 VirtualBox 中使用 tmux 2.0、Ubuntu 14.04.2 LTS。

為了使 tmux 打開與目前視窗具有相同路徑的新視窗,我將此行添加到我的~/.tmux.conf文件中:

bind c new-window -c "#{pane_current_path}"

請注意,在 tmux 中,如果我通過 symlinkcd從家到子目錄,然後檢查並得到:pwd``pwd -P

~$ cd pythons
~/pythons$               # An awesome prompt

~/pythons$ pwd           # According to "man pwd" this shows the "logical" path
/home/qiime/pythons

~/pythons$ pwd -P        # and this shows the "physical" path
/media/sf_Google_Drive/Home/Programs/Pythons

問題是

如果我在新的 bash 提示符下打開一個的tmux 視窗,則採用物理路徑:~/pythons

/media/sf_Google_Drive/Home/Programs/Pythons$     # Not an awesome prompt

**問:**是的,它打開到了正確的目錄……但是有沒有辦法讓 tmux 使用邏輯路徑而不是完整的物理路徑來啟動 bash?

或者,也許我可以添加一些東西.bashrc來實現這一點?

編輯:

要檢查是否有任何配置設置導致此問題,我嘗試註釋掉~/.tmux.conf

bind c new-window -c "#{pane_current_path}"

但我仍然得到完整的物理路徑。我還嘗試echo從文件頂部獲取目前(邏輯)路徑~/.bashrc。不幸的是,這與父視窗醜陋的物理路徑相呼應,這顯然已經成為新視窗的物理邏輯路徑。所以 tmux 2.0 必須通過值將它傳遞給新的 bash 實例"#{pane_current_path}"

此外,我剛剛發現這個最近打開的 tmux 問題:pane_current_path 與窗格的 PWD #33 不一致,表明此行為源於 tmux 程式碼。

**問:**所以也許我的問題應該是,有解決方法嗎?

以下對我有用。

~/.bashrc,添加以下行:

PS1='$([ -n "$TMUX" ] && tmux setenv TMUXPWD_$(tmux display -p "#I") $PWD)\u@\H:\w$ '

~/.tmux.conf添加以下行:

bind-key c run-shell 'tmux neww "cd $(tmux display -p "\$TMUXPWD_#I"); exec bash"'
bind-key % run-shell 'tmux splitw -h "cd $(tmux display -p "\$TMUXPWD_#I"); exec bash"'
bind-key '"' run-shell 'tmux splitw -v "cd $(tmux display -p "\$TMUXPWD_#I"); exec bash"'

重啟 tmux。

來源

請參閱“如何在與目前視窗相同的目錄中打開新視窗?”部分。在http://tmux.svn.sourceforge.net/viewvc/tmux/trunk/FAQ

請注意,必須將 .bashrc 行末尾的字元從上面連結中的原始字元更改為'\u@\H:\w$ ',才能正確顯示完整的 bash 提示符。有關更多資訊,請參見http://www.tldp.org/HOWTO/Bash-Prompt-HOWTO/bash-prompt-escape-sequences.html

引用自:https://unix.stackexchange.com/questions/212667