You can't change the default shell of at
, it is hardcoded as /bin/sh
in the source.
The source code of at
clarifies this, from at.c
:
/* POSIX.2 allows the shell specified by the user's SHELL environment
variable, the login shell from the user's password database entry,
or /bin/sh to be the command interpreter that processes the at-job.
It also alows a warning diagnostic to be printed. Because of the
possible variance, we always output the diagnostic. */
fprintf(stderr, "warning: commands will be executed using /bin/sh\n");
Implementation, from atd.c
:
if (execle("/bin/sh", "sh", (char *) NULL, nenvp) != 0)
The man page conforms accordingly:
at and batch read commands from standard input or a specified file which are to be executed at a later time, using /bin/sh.
That leaves you to recompile your own copy as the only solution to meet your need.