mirror of
				https://github.com/ohmyzsh/ohmyzsh.git
				synced 2025-11-04 13:21:19 +08:00 
			
		
		
		
	feat(last-working-dir): log separate lwds for different SSH keys on the same user account (#9534)
				
					
				
			Co-authored-by: Marc Cornellà <hello@mcornella.com>
This commit is contained in:
		
							parent
							
								
									fae34b383d
								
							
						
					
					
						commit
						869eb20913
					
				@ -1,15 +1,33 @@
 | 
			
		||||
# last-working-dir plugin
 | 
			
		||||
 | 
			
		||||
Keeps track of the last used working directory and automatically jumps into it
 | 
			
		||||
for new shells, unless:
 | 
			
		||||
for new shells, unless the starting directory is not `$HOME`.
 | 
			
		||||
 | 
			
		||||
- The plugin is already loaded.
 | 
			
		||||
- The current `$PWD` is not `$HOME`.
 | 
			
		||||
 | 
			
		||||
Also adds `lwd` function to jump to the last working directory.
 | 
			
		||||
Also adds a `lwd` function to jump to the last working directory.
 | 
			
		||||
 | 
			
		||||
To use it, add `last-working-dir` to the plugins array in your zshrc file:
 | 
			
		||||
 | 
			
		||||
```zsh
 | 
			
		||||
plugins=(... last-working-dir)
 | 
			
		||||
```
 | 
			
		||||
 | 
			
		||||
## Features
 | 
			
		||||
 | 
			
		||||
### Use separate last-working-dir files with different SSH keys
 | 
			
		||||
 | 
			
		||||
If the same user account is used by multiple users connecting via different SSH keys, you can
 | 
			
		||||
configure SSH to map them to different `SSH_USER`s and the plugin will use separate lwd files
 | 
			
		||||
for each one.
 | 
			
		||||
 | 
			
		||||
Make sure that your SSH server allows environment variables. You can enable this feature
 | 
			
		||||
within the `/etc/sshd/sshd_config` file:
 | 
			
		||||
 | 
			
		||||
```
 | 
			
		||||
PermitUserEnvironment yes
 | 
			
		||||
```
 | 
			
		||||
 | 
			
		||||
Then, add `environment="SSH_USER=<SSH_USERNAME>"` before the SSH keys in your `authorized_keys` file:
 | 
			
		||||
 | 
			
		||||
```
 | 
			
		||||
environment="SSH_USER=a.test@example.com" ssh-ed25519 AAAAC3Nz...
 | 
			
		||||
```
 | 
			
		||||
 | 
			
		||||
@ -5,16 +5,18 @@ typeset -g ZSH_LAST_WORKING_DIRECTORY
 | 
			
		||||
autoload -U add-zsh-hook
 | 
			
		||||
add-zsh-hook chpwd chpwd_last_working_dir
 | 
			
		||||
chpwd_last_working_dir() {
 | 
			
		||||
	if [ "$ZSH_SUBSHELL" = 0 ]; then
 | 
			
		||||
		local cache_file="$ZSH_CACHE_DIR/last-working-dir"
 | 
			
		||||
		pwd >| "$cache_file"
 | 
			
		||||
	fi
 | 
			
		||||
  # Don't run in subshells
 | 
			
		||||
  [[ "$ZSH_SUBSHELL" -eq 0 ]] || return 0
 | 
			
		||||
  # Add ".$SSH_USER" suffix to cache file if $SSH_USER is set and non-empty
 | 
			
		||||
  local cache_file="$ZSH_CACHE_DIR/last-working-dir${SSH_USER:+.$SSH_USER}"
 | 
			
		||||
  pwd >| "$cache_file"
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
# Changes directory to the last working directory
 | 
			
		||||
lwd() {
 | 
			
		||||
	local cache_file="$ZSH_CACHE_DIR/last-working-dir"
 | 
			
		||||
	[[ -r "$cache_file" ]] && cd "$(cat "$cache_file")"
 | 
			
		||||
  # Add ".$SSH_USER" suffix to cache file if $SSH_USER is set and non-empty
 | 
			
		||||
  local cache_file="$ZSH_CACHE_DIR/last-working-dir${SSH_USER:+.$SSH_USER}"
 | 
			
		||||
  [[ -r "$cache_file" ]] && cd "$(cat "$cache_file")"
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
# Jump to last directory automatically unless:
 | 
			
		||||
 | 
			
		||||
		Loading…
	
	
			
			x
			
			
		
	
		Reference in New Issue
	
	Block a user