![o script bash não consegue obter diferença em $PS1 ou $- ao executar interativamente ou via cron](https://rvso.com/image/617241/o%20script%20bash%20n%C3%A3o%20consegue%20obter%20diferen%C3%A7a%20em%20%24PS1%20ou%20%24-%20ao%20executar%20interativamente%20ou%20via%20cron.png)
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.