Se eu criar um cronjob como:
* * * * * /root/runfile
E eu coloco o conteúdo de /root/runfile
como:
#!/bin/bash
printenv >> /root/printenv
Os conteúdos que aparecem em /root/printenv
são:
LANGUAGE=en_CA:en
HOME=/root
LOGNAME=root
PATH=/usr/bin:/bin
LANG=en_US.UTF-8
SHELL=/bin/sh
PWD=/root
Note que ele diz " SHELL=/bin/sh
", mas meu script tem um shebang como #!/bin/bash
. Mas printenv (env, set) estão todos relatando /bin/sh
como o shell.
No entanto, se eu executar esses comandos dentro de runfile
, ele relatará com êxito / bin / bash:
ps -p$$ -ocmd= >> /root/printenv
OR
readlink /proc/$$/exe >> /root/printenv
Isso prova que estou em um shell real / bin / bash:
/bin/bash
Enquanto escrevo esta pergunta, estou percebendo que talvez a razão é que ela está herdando a variável de ambiente SHELL anterior, e isso nunca muda, e é por isso que seu conteúdo ainda é do processo de chamada cron que é / bin / sh. Essa explicação é confirmada na segunda pergunta vinculada de Gilles.