2

Мой zsh делает что-то странное, он запускает исполняемый файл, который не является первым исполняемым файлом на моем пути. У меня есть скрипт-обертка для ssh, но обертка не вызывается, а вместо этого вызывается настоящий двоичный файл ssh.

Немного диагностики:

$ 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'

Я попытался запустить 'ssh' в bash, и мой скрипт-обертка был вызван, поэтому кажется, что это проблема с zsh.

Пожалуйста, дайте мне сейчас, если нужна какая-либо другая диагностическая информация.

Я действительно хотел бы знать, почему переменная $ PATH игнорируется, когда я пытаюсь вызвать ssh.

Обновление 1

Добавлен вывод из встроенного, который -a SSH

1 ответ1

5

На информационной странице zsh использует хеш-таблицу для хранения путей к исполняемым файлам. Я предполагаю, что вы делали вещи в таком порядке.

  1. Началась сессия Zsh
  2. Запустил стандартный ssh, он бы хранил путь в хеш-таблице.
  3. Создан скрипт-обертка.
  4. Запустил ssh, он выбирает неправильный (устаревший) путь из хеш-таблицы.
  5. Запустил which ssh , он просто проверяет PATH, а не хэш-таблицу zsh.

Информационная страница для zsh предполагает, что hash -r очистит хеш-таблицу, после чего будет восстановлена хеш-таблица, которая должна подобрать ваш скрипт-обертку.

Когда вы запустили bash, он не разделял внутренний хэш путей zsh, поэтому он просто начинает искать в PATH что-то.

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .