ウィンドウマネージャのキーバインディングで最後に使用した端末と同じディレクトリに新しい端末を開く方法は?

ウィンドウマネージャのキーバインディングで最後に使用した端末と同じディレクトリに新しい端末を開く方法は?

私はタイリングウィンドウマネージャを使用しており、gnome-terminal複数のタブを使用してurxvtウィンドウマネージャが管理する複数のインスタンスに切り替えています。私が見逃した機能の1つは、新しい端末を開き、古い端末の作業ディレクトリをデフォルトとして使用する機能です。

簡単に言うと:最後に使用した $PWD をデフォルトとする新しい urxvt(bash) を開く方法が必要です。

私の心に浮かぶ唯一の解決策は、cd次のように各パスの現在のパスを保存することです。

echo $PWD > ~/.last_dir

そして、次のように新しい端末のパスを復元します。

cd `cat ~/.last_dir`

2番目のコマンドを取得できますが、.bashrcディレクトリが変更されるたびに最初のコマンドを実行する方法がわかりません:)

関連または未使用のscreen簡単なソリューションを歓迎します。tmux

答え1

現在、このバージョンのソリューション#1を使用しています。

# save path on cd
function cd {
    builtin cd $@
    pwd > ~/.last_dir
}

# restore last saved path
if [ -f ~/.last_dir ]
    then cd `cat ~/.last_dir`
fi

私の中.zshrc

答え2

これは本当に非常にマイナーなことです。urxvt既存のurxvtウィンドウで実行すると、新しいウィンドウが同じディレクトリにあります。これにはdup別名を使用しました。urxvt &ショートカットにバインドするには、bashのbindコマンドを使用できます。たとえば、次のようにバインドしますF1

$ bind '"\e[11~": "urxvt &\n"'

答え3

3つの用途があります.last_direcho $PWD > ~/.last_dir

  1. 特殊機能では、以下を取り巻くラッパーですcd

    function cd_
    {
      [[ -d "$@" ]] || return 1
      echo "$@" > ~/.last_dir
      cd "$@"
    }
    

    新しい作業ディレクトリを保存しようとするたびに、それをディレクトリに入れて~/.bashrccdcd_の代わりに使用します。

  2. あなたの$PROMPT_COMMAND推奨しない):

    PROMPT_COMMAND="$PROMPT_COMMAND; pwd > ~/.last_dir"
    

    ターミナルで直接テストするか~/.bashrc.last_dir含まれます。

  3. カスタマイズされたPerl拡張スクリプトのためのrxvt。私は自分で作ったことはありませんが、オンラインで多くの例を見つけることができます。

答え4

もちろん、これはcd動作を修正するための可能な方法ですが、より簡単な解決策を見せたいと思いました。内部に男乱交(1)相互作用があれば~/.bash_logout存在する場合は終了して実行します。したがって、最後のパスが呼び出されるたびにパスを保存するのではなく、終了時にパスを保存cdできます。

私は~/.bash_logoutとても簡単です。

echo $PWD >~/.lastdir

私は私のどこかに.bashrc次の行を置きました。

[ -r ~/.lastdir ] && cd $(<~/.lastdir)

関連情報