Nos momentos em que precisei fazer isso, sei que é um script que nunca redirecionarei para um arquivo ou para um canal. Portanto, um teste simples é verificar se o stdout (a.k.a file descriptor 1) é um tty (que não será do cron). No bash:
if [ -t 1 ]
then
: # running from terminal
else
: # not running from terminal, cron maybe
fi
Mais uma vez, warning , este é um teste simplesmente se a sua stdout for tty. Mas funciona para os meus propósitos simples.
Você também pode verificar qual é o seu processo pai. No Linux, pode ser tão simples quanto:
if grep -q cron /proc/$PPID/cmdline &> /dev/null
then
: # running from cron
fi