Executar um comando local depois de fechar uma conexão SSH?

1

Eu configurei meu zsh para atualizar o Título XTerm sempre que eu mudo os diretórios . É legal! Infelizmente eu tenho um problema comum, que é este:

% cd foo;       # title changes to "host1:~/foo"
% ssh host2;    # title changes to "host2:~"
% pwd
/home/user/foo  # title is still "host2:~"

Eu preciso executar algum comando sempre que uma conexão ssh terminar, chpwd , ou cd . , ou algo similar. Eu não acho que eu possa usar um alias, porque eu preciso de algo como

alias ssh=ssh $*; cd .

mas AFAICT você não pode escolher onde os argumentos vão em um alias.

    
por James B 23.10.2013 / 16:41

1 resposta

4

Primeiro, um comentário: em zsh (e btw. também em bash & friends) você não pode usar argumentos em um alias. Use uma função:

# function hello() { echo $1 $3 } 
# hello one two three
one three

Você altera o título na função chpwd() , que é chamada sempre que você altera o diretório. Então, você precisa usar cd . para atualizar seu título. Ou - seguindo sua abordagem -, sobrecarregue '' o comando ssh com esta função para executar chpwd() após o término da sessão ssh:

function ssh() { command ssh "$@"; chpwd }

Uma solução que eu prefiro é colocar o comando para alterar o título em precmd() , que é executado antes que o prompt seja exibido. Eu defino por exemplo no meu ~/.zshrc

precmd () {
   [[ -t 1 ]] && print -Pn "\e]0;%n@%m:%~\a"
}

para obter um título como user@host:/current/dir , que é atualizado imediatamente ao se conectar a uma máquina remota (desde que haja um código semelhante em ~/.zshrc ) e ao retornar à sessão local.

(O [[ -t 1 ]] verifica se a sessão está conectada a um terminal - não é tão importante.)

    
por 23.10.2013 / 17:08