Можно использовать шаблоны.
template <typename T> const char* typeof(T&) { return "unknown"; } // default
template<> const char* typeof(int&) { return "int"; }
template<> const char* typeof(float&) { return "float"; }
В примере выше, когда тип не будет подобран, он распечатает "неизвестный".
Я в конечном счете нашел "$ -" var, который работает на меня:
if [[ $- =~ i ]] ; then
[ -x /bin/tcsh ] && exec /bin/tcsh
# Bash startup stuff goes here...
fi
Получил это от: https://www.gnu.org/software/bash/manual/html_node/Is-this-Shell-Interactive_003f.html