zsh executando um comando, mas não do caminho

2

Meu zsh está fazendo algo estranho, ele está executando um executável que não é o primeiro executável no meu caminho. Eu tenho um script de wrapper para ssh mas o wrapper não está sendo chamado enquanto o binário ssh real está sendo invocado em vez disso.

Alguns diagnósticos:

$ echo $SHELL
/bin/zsh

$ echo $PATH
/home/user1/bin:/home/user1/usr/bin:/usr/local/bin:/usr/bin:/bin:/usr/sbin:/sbin:/usr/local/sbin:/usr/X11R6/bin:/usr/X11/bin:/usr/kerberos/bin

$ which ssh
~/bin/ssh

$ builtin which -a ssh
/home/user1/bin/ssh
/usr/bin/ssh

$ alias
l.='ls -d .* --color=tty'
ll='ls -lh'
ls='ls --color=auto'
run-help=man
vi=vim
which='alias | /usr/bin/which --tty-only --read-alias --show-dot --show-tilde'
which-command=whence
zcp='noglob zmv -W -C'
zln='noglob zmv -W -L'
zmv='noglob zmv -W -M'

Eu tentei rodar 'ssh' no bash e meu script wrapper foi invocado, então parece que é um problema com o zsh.

Por favor, deixe-me agora, se qualquer outra informação de diagnóstico for necessária.

Eu realmente gostaria de saber porque é que a variável $ PATH está sendo ignorada quando eu tento invocar o ssh.

Atualização 1

Adicionada a saída de 'builtin which -a ssh'

    
por Alex Q 18.06.2013 / 08:17

1 resposta

5

Na página de informações, o zsh usa uma tabela de hash para armazenar os caminhos para executáveis. Eu estou supondo que você fez as coisas nesta ordem.

  1. Sessão zsh iniciada
  2. Executou o ssh padrão, isso armazenaria o caminho na tabela de hash.
  3. Script de wrapper criado.
  4. Ran ssh, isso pega o caminho errado (desatualizado) da tabela de hash.
  5. Ran which ssh , isso apenas verifica o PATH, não a tabela hash do zsh.

A página de informações do zsh sugere que hash -r limpará a tabela de hash, após o que a tabela de hash será reconstruída, o que deve pegar o seu script de wrapper.

Quando você começou o bash, ele não compartilhou o hash interno de caminhos zsh, então ele apenas começou a procurar no PATH para encontrar coisas.

    
por 18.06.2013 / 15:40