Я хочу, чтобы мои сценарии cron выполнялись многословно при интерактивном запуске пользователем системы (например, для целей отладки) и тихо в противном случае (для cron, поскольку я хочу получать электронную почту тогда и только тогда, когда я получаю ошибки).
Я пробовал это в своем сценарии:
case "$-" in
*i*) echo "this shell is interactive" > /tmp/log;
*) echo "this shell isn't" > /tmp/log;
esac
но даже при интерактивном запуске (/ bin / bash /tmp/my_script.sh) он всегда возвращает «этой оболочки нет» и
echo $-
в сценарии оболочки возвращает hB, а не hiB.
Я тоже пробовал
if [ -z $PS1 ]
думая, что cron не имеет установленного $ PS1, но, опять же, из приглашения echo $ PS1 возвращает эту переменную, а в интерактивном режиме в скрипте ничего не возвращает: /
Я хотел бы знать, почему интерактивно (/ bin / bash my_script.sh) это не возвращает ни значение i для $ - ни значение $ PS1.
Большое спасибо за вашу помощь!
Вы можете установить переменную среды в cron и проверить это.
Поместите THISISCRON = 1 в отдельную строку над записью cron.
В сценариях Bash никогда не бывает интерактивных опций. Они везде не интерактивны.
Ты мог проверьте, является ли stdin tty.
В качестве альтернативы вы можете добавить к своему скрипту флаг, говорящий, что он будет тихим или подробным, вместо того, чтобы заставлять его угадывать.