Exporting functions is a bash special feature* and not supported by any other shell or program like systemd and as all exported variables this belongs to /etc/profile, /etc/profile.local, and /etc/profile.d/*.sh Can we please stop misusing ~/.bashrc, /etc/bash.bashrc, and /etc/bash.bashrc.local for environment? Those are for interacive invocation only. As the the profile is sourced at login via e.g. (/usr)/etc/X11/xdm/Xsession in the exec_login() function to have the environmnet only once for the full login session. * werner@boole:~> xyz() { true; } werner@boole:~> export -f xyz werner@boole:~> printenv | grep xyz printenv | grep -A1 xyz BASH_FUNC_xyz%%=() { true } only bash knows about `export -f' and `BASH_FUNC_*%%=()' but not systemd