Выполнение zsh rehash после сборки

У меня есть скрипт сборки, который может изменить, какие двоичные файлы находятся в моей переменной $ PATH (он не редактирует $ PATH сам, но добавляет / удаляет файлы в папки, которые уже находятся в $ PATH). Автозаполнение zsh не обновляется, чтобы отражать файлы, которые были добавлены / удалены в ответ на сборку, поэтому мне нужно либо перезапустить оболочку, либо выполнить встроенную оболочку «rehash», чтобы сообщить ей обновить свой автозаполненный кеш.

Я решил, что хочу автоматизировать перепрограммирование, поэтому сначала я сделал это:

build() { ~/bin/real_build && rehash } 

Но функции оболочки выполняются в их собственной подоболочке, поэтому перефразировка будет обновлять кеш для подоболочки, а не оболочку в терминале, который я использовал. Поэтому я переключился на это:

 alias build='~/bin/real_build && rehash' 

Это работает, за исключением случаев, когда я хочу передать аргументы для сборки. Если я передам «чистый», я бы хотел, чтобы он выполнялся:

 ~/bin/real_build clean && rehash 

Но вместо этого он будет делать:

 ~/bin/real_build && rehash clean 

Поэтому я застрял – я могу использовать псевдоним и не иметь возможности передавать аргументы, или я могу использовать функцию и не иметь ее на самом деле обновлять записи автозаполнения. Есть ли способ заставить обе работать?

2 Solutions collect form web for “Выполнение zsh rehash после сборки”

Функции оболочки не запускаются в их собственной подоболочке, если вы не используете круглые скобки вместо обычных фигурных скобок вокруг тела. Ваша функция обновляет исполняемый хэш на каждой версии zsh, которую я видел, и я не думаю, что есть возможность изменить это поведение.

Я думаю, что source может быть лучший вариант здесь. Вот пример:

 cat << EOF > foo touch $1 chmod +x $1 rehash EOF 

Выполнить foo следующим образом:

 source foo bar 

Если это было на вашем пути, bar теперь завершена.

  • tmux / zsh помещает вставленный текст
  • Привязать префикс tmux к символу раздела §
  • Zsh-эквивалент bash `expr index“ abcdefghijklmnopqrstuvwxyz ”xyzd`
  • Приоритет && vs & in bash и zsh
  • Показать содержимое символической ссылки
  • Отображать возможные исправления, но не применять их автоматически
  • Конкатенация колонн горизонтально. Печать только строк, которые пересекаются в 1-й колонке
  • Связанные с движением движения команды tput в zsh: можно ли настроить «четкое» поведение?
  • Предотвращать отображение терминала ранее выполненной командой
  • Запустить мастер использования Zsh
  • исполняемый обертку, запустить исходный исполняемый файл из хвоста PATH
  • Linux и Unix - лучшая ОС в мире.