workon é uma função. A definição de função é local para um shell e não é visível nos subshells (o mesmo que as definições de variáveis).
Você precisa exportar a função, se quiser que ela fique visível em subshells. Da página de manual para bash :
export [-fn] [name[=word]] ...
export -pThe supplied names are marked for automatic export to the environment of subsequently executed commands. If the
-foption is given, the names refer to functions. If no names are given, or if the-poption is supplied, a list of names of all exported variables is printed. The-noption causes the export property to be removed from each name. If a variable name is followed by=word, the value of the variable is set to word.exportreturns an exit status of 0 unless an invalid option is encountered, one of the names is not a valid shell variable name, or -f is supplied with a name that is not a function.
Portanto, export -f workon após a definição da função resolverá seus problemas.