Это должно быть возможно. Вдохновлен этой строкой в рыбной документации (акцент мой):
Функции автозагрузки
Когда fish встречает команду, она пытается автоматически загрузить функцию для этой команды, ища файл с именем этой команды в ~ / .config / fish / functions /.
Таким образом, у нас может быть функция, которая проверяет папку в каждой команде 'cd' и запускает скрипт для активации там, где это необходимо. Проще это сделать, если у вас есть только один VE.
Возможно, решение состоит в том, чтобы проверить определенный файл сценария, который переключает VE в новом каталоге, и выполнить его, если он существует. (Это должно позаботиться о том, как обращаться со случаем, когда вы переключаетесь непосредственно в подкаталог.)
Обновлено после встречного вопроса из ОП:
Вот что я имел в виду. Скажем, мы копируем эту функцию в файл ~ / .config / fish / functions / cd.fish:
# search for a myInit.fish file UP THE DIRECTORY TREE, starting from the current folder.
# if found, execute it.
# Intended for automatically switching to the python virtual environment on entering the
# directories. Can put in other initialization stuff.
function cd --description 'change directory - fish overload'
builtin cd $param $argv
set -l check_dir (pwd)
# if myInit.fish is found in the home directory:
if test -f "$check_dir/myInit.fish"
source $check_dir/myInit.fish
echo "executed: source $check_dir/myInit.fish"
return
end
# Look up the directory tree for myInit.fish:
set check_dir (string split -r -m 1 / $check_dir)[1]
while test $check_dir
if test -f "$check_dir/myInit.fish"
source $check_dir/myInit.fish
echo "executed: source $check_dir/myInit.fish"
break;
else
set check_dir (string split -r -m 1 / $check_dir)[1]
end # if ... else ...
end # while
end # function
Скажем, вы хотите переключиться на виртуальную среду с именем "VEOpenCV", когда вы переключаетесь либо в каталог OpenCV, либо в один из его подкаталогов. Для этого создайте файл в каталоге OpenCV, назовите его myInit.fish и вставьте в него следующую строку:
activate VEOpenCV
Чтобы деактивировать VE при переключении на домашний каталог, создайте еще один файл myInit.fish в домашнем каталоге и вставьте туда команду «деактивировать». Если нет, просто создайте пустой файл myInit.fish в домашнем каталоге, чтобы прекратить обход каталога.
Если вы предпочитаете не перегружать 'встроенный компакт-диск', измените имя функции выше на 'myCd' или что-либо еще и переименуйте файл, чтобы соответствовать этому. Затем позвоните
%> myCd OpenCV
вместо
%> cd OpenCV
Я не тщательно его протестировал; но ограниченное тестирование прошло успешно. Если это не работает, разместите заметку здесь.
И не забудьте опубликовать отладки / улучшения / ошибки и другую соответствующую информацию - или лучшее решение, которое вы можете найти здесь!