if [ "$PRESERVE_SSH_CWD" = "true" ]; then # Ensure the directory where we store terminal cwds and ssh exists mkdir -p $HOME/.config/terminalscwd/ # Alias for cd: when we change directory, we write the new cwd in the file corresponding to the terminal uuid cd() { builtin cd $1 pwd > $HOME/.config/terminalscwd/$TERMINAL_UUID.cwd } # Alias for ssh: when we ssh somewhere, we write it so that we know we should ssh when cloning terminal ssh() { echo $1 > $HOME/.config/terminalscwd/$TERMINAL_UUID.ssh /usr/bin/ssh $@ rm $HOME/.config/terminalscwd/$TERMINAL_UUID.ssh pwd > $HOME/.config/terminalscwd/$TERMINAL_UUID.cwd } # If terminal uuid does not exit if [ -z $TERMINAL_UUID ]; then # Generate one export TERMINAL_UUID=$(uuidgen) fi # Copy state for new terminal if [ -f $HOME/.config/terminalscwd/$PARENT_TERMINAL.cwd ]; then cp $HOME/.config/terminalscwd/$PARENT_TERMINAL.cwd $HOME/.config/terminalscwd/$TERMINAL_UUID.cwd fi if [ -f $HOME/.config/terminalscwd/$PARENT_TERMINAL.ssh ]; then cp $HOME/.config/terminalscwd/$PARENT_TERMINAL.ssh $HOME/.config/terminalscwd/$TERMINAL_UUID.ssh fi # When we're done, delete the uuid files preserve_ssh_cleanup() { rm -rf $HOME/.config/terminalscwd/$TERMINAL_UUID.cwd rm -rf $HOME/.config/terminalscwd/$TERMINAL_UUID.ssh } trap preserve_ssh_cleanup EXIT # If there already is a file corresponding to the current uuid if [ -f $HOME/.config/terminalscwd/$TERMINAL_UUID.cwd ]; then # Go the the right directory cd $(cat $HOME/.config/terminalscwd/$TERMINAL_UUID.cwd) else # Use our custom alias to go to home, and set the file cwd cd fi # If we're running in an ssh session if [ -f $HOME/.config/terminalscwd/$TERMINAL_UUID.ssh ]; then # Run the ssh command, and exec shell in the end so the terminal doesn't exit at end of ssh ssh $(cat $HOME/.config/terminalscwd/$TERMINAL_UUID.ssh) fi fi