Выполнение zsh rehash после сборки
У меня есть скрипт сборки, который может изменить, какие двоичные файлы находятся в моей переменной $ PATH (он не редактирует $ PATH сам, но добавляет / удаляет файлы в папки, которые уже находятся в $ PATH). Автозаполнение zsh не обновляется, чтобы отражать файлы, которые были добавлены / удалены в ответ на сборку, поэтому мне нужно либо перезапустить оболочку, либо выполнить встроенную оболочку «rehash», чтобы сообщить ей обновить свой автозаполненный кеш.
Я решил, что хочу автоматизировать перепрограммирование, поэтому сначала я сделал это:
- zsh псевдоним переопределяется каким-то образом
- Клавиатурные привязки от bash до zsh?
- Перемещение дескрипторов файлов в zsh
- История-поиск в zsh работает только для команд?
- Альтернативный псевдоним суффикса Zsh в bash
build() { ~/bin/real_build && rehash }
Но функции оболочки выполняются в их собственной подоболочке, поэтому перефразировка будет обновлять кеш для подоболочки, а не оболочку в терминале, который я использовал. Поэтому я переключился на это:
alias build='~/bin/real_build && rehash'
Это работает, за исключением случаев, когда я хочу передать аргументы для сборки. Если я передам «чистый», я бы хотел, чтобы он выполнялся:
~/bin/real_build clean && rehash
Но вместо этого он будет делать:
~/bin/real_build && rehash clean
Поэтому я застрял – я могу использовать псевдоним и не иметь возможности передавать аргументы, или я могу использовать функцию и не иметь ее на самом деле обновлять записи автозаполнения. Есть ли способ заставить обе работать?
- Предпочтительные типы файлов в командной строке
- удаление странных символов из приглашения zsh
- Zsh завершает составление рецептов
- История команд в Zsh
- Исключение имени каталога в рекурсивном глобусе zsh
- Список завершения автозапуска Zsh в файл или меньше
- Что нужно / не следует входить .zshenv, .zshrc, .zlogin, .zprofile, .zlogout?
- zsh перейти к концу копии из X буфера обмена
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
теперь завершена.
- Функция daemon в /init.d не запускает программу в фоновом режиме в fedora13
- Загрузка в режиме спасения с поддержкой vlan в RHEL