Скрипт bash не может получить разницу в $PS1 или $- при запуске в интерактивном режиме или через cron

Скрипт bash не может получить разницу в $PS1 или $- при запуске в интерактивном режиме или через cron

Я хочу, чтобы мои скрипты 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.

Большое спасибо за вашу помощь!

решение1

Вы могли быпроверить, является ли stdin tty.

В качестве альтернативы вы можете добавить в свой скрипт флаг, сообщающий ему, что он должен быть тихим или многословным, а не заставлять его угадывать.

решение2

Вы можете установить переменную среды в cron и проверить ее.

Разместите THISISCRON=1 в отдельной строке над записью cron.

решение3

Скрипты Bash никогда не имеют интерактивной опции. Они неинтерактивны везде.

Связанный контент