How to change the starting directory of a tmux session?

The way to do this is to detach from the session (^b d with the default keybindings) and then specify a different directory when you reattach to it. When attaching to a session, use the -c flag to specify the working directory. Here's an example:

$ tmux list-sessions
tmuxwtfbbq: 3 windows (created Tue Apr  5 14:25:48 2016) [190x49]
$ tmux attach-session -t tmuxwtfbbq -c /home/chuck/new_default_directory

This setting will be persisted - after you've reset the working directory, you won't need to keep specifying it every time you reattach to the session.

For the record, I'm on tmux version 2.0 (though I don't think it matters - I couldn't find anything about adding a -c option to the attach-session command in the change logs so I assume it's been there for quite a while).


Chucksmash's answer is a good one, but it can also be achieved without using the session if you like. The command attach-session is also available in the tmux command prompt; and the target session can be specified as the "current" session using a dot.

attach-session -t . -c /path/to/new/directory

Here's how you can change the tmux session's working directory without detaching the session, and without needing use to the <prefix> keystrokes:

(Option 1) Enter the directory at tmux command prompt:

tmux command-prompt "attach -c %1"

...will open a command prompt, then you type the working directory you want ~/my/dir and press ENTER

(Option 2) Provide the directory on the in-pane command line:

# Execute this in one of the shell panes of within your tmux session:
tmux command-prompt -I $PWD -P "New session dir:" "attach -c %1"

With this approach, the prompt for new-directory is pre-populated with the current dir of the pane which launched the command. Of course you can substitute anything else for $PWD if you please.

Want a shell function?

I have added this to my shell initialization:

# Change the current directory for a tmux session, which determines
# the starting dir for new windows/panes:
function tmux-cwd {
    tmux command-prompt -I $PWD -P "New session dir:" "attach -c %1"
 }

With all of these options, any future new windows will start in the given dir.

Note: attach, attach-session, and a are all aliases for each other. The tmux command-prompt has many other powers, it's worth reading the man page


use attach-session -c from command prompt or in a binding.

I have bindings to use the current directory automatically, using the provided pane_current_path var.

I have this bound to M-c, to update the current path.

# tmux.conf
# set default directory for new windows in this session to current directory:
bind M-c attach-session -c "#{pane_current_path}"

Similarly, when I just want another window in the current directory without changing the default, I have a binding on C:

# tmux.conf
# open a new window in the current directory
bind C new-window -c "#{pane_current_path}"

My bindings:

  • c: open a new window in session default directory [default binding]
  • C: open a new window in current directory
  • M-c: set session default directory to current directory

Happy Tmuxing!