workon
это функция. Определение функции является локальным для оболочки и не отображается в подоболочках (так же, как определения переменных).
Вам нужно экспортировать функцию, если вы хотите, чтобы она была видимой в подоболочках. Со страницы руководства по bash
:
export [-fn] [name[=word]] ...
export -p
Предоставленные имена помечаются для автоматического экспорта в среду последующих выполненных команд. Если задана опция -f
, имена относятся к функциям. Если имена не указаны или указана опция -p
список имен всех экспортируемых переменных. Опция -n
приводит к удалению свойства экспорта из каждого имени. Если за именем переменной следует =word
, значение переменной устанавливается в слово. export
возвращает состояние выхода 0, если не обнаружена неверная опция, одно из имен не является допустимым именем переменной оболочки, или -f предоставляется с именем, которое не является функцией.
Поэтому export -f workon
после определения функции решит ваши проблемы.