Назад | Перейти на главную страницу

скрипт 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.

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

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

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

В сценариях Bash никогда не бывает интерактивных опций. Они везде не интерактивны.

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

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