o script bash não consegue obter diferença em $PS1 ou $- ao executar interativamente ou via cron

o script bash não consegue obter diferença em $PS1 ou $- ao executar interativamente ou via cron

Quero que meus scripts cron sejam executados detalhadamente quando executados interativamente por um usuário do sistema (para fins de depuração, por exemplo) e silenciosamente (para cron, pois desejo receber e-mail se e somente se receber erros).

Eu tentei isso no meu script:

case "$-" in
*i*) echo "this shell is interactive" > /tmp/log;
*) echo "this shell isn't" > /tmp/log;
esac

mas mesmo quando executado de forma interativa (/bin/bash /tmp/my_script.sh) ele retorna sempre "este shell não é" e

echo $-

no shell script retorna hB e não hiB.

Eu também tentei

if [ -z $PS1 ]

pensando que o cron não tem $PS1 definido, mas mais uma vez, no prompt, echo $PS1 retorna essa variável, e interativamente em um script, não retorna nada :/

Gostaria de saber por que interativamente (/bin/bash my_script.sh) isso não retorna o valor i para $- nem o valor de $PS1.

Muito obrigado pela sua ajuda!

Responder1

Você poderiaverifique se stdin é um tty.

Como alternativa, você pode adicionar um sinalizador ao seu script informando-o para ser silencioso ou detalhado, em vez de adivinhá-lo.

Responder2

Você pode definir uma variável de ambiente no cron e verificar isso.

Coloque THISISCRON=1 em uma linha acima da entrada do cron.

Responder3

Os scripts Bash nunca têm a opção interativa ativada. Eles não são interativos em todos os lugares.

informação relacionada