Нашел скрипт на моем кроне.ежемесячно, мне интересно, что он делает?

Я новичок в программировании bash, извините, если это может быть какой-то глупый вопрос. Я нашел скрипт на своем сервере и пытаюсь понять каждую строчку:

#!/bin/sh
#
# man-db cron weekly

set -e

if ! [ -d /var/cache/man ]; then
    # Recover from deletion, per FHS.
    mkdir -p /var/cache/man
    chown man:root /var/cache/man || true
    chmod 2755 /var/cache/man
fi

# regenerate man database
if [ -x /usr/bin/mandb ]; then
# --pidfile /dev/null so it always starts; mandb isn't really a daemon,
# but we want to start it like one.
start-stop-daemon --start --pidfile /dev/null 
          --startas /usr/bin/mandb --oknodo --chuid man 
          -- --quiet
fi

exit 0

некоторые вещи я не понимаю, как

set -e

Я читал об этом, что он "проверяет" ваши команды. Поэтому он дает предупреждения или исключение, если что-то пойдет не так? Или более подробный отчет об ошибке?

if ! [ -d /var/cache/man ]; then OR
if [ -x /usr/bin/mandb ]; then

чего я не понимаю, так это команд "-d" или "-x" в предложении if, имхо там чего-то не хватает.

chown man:root /var/cache/man || true

Я не понимаю последнюю часть, в чем причина этого "или истинного".

может кто-нибудь может мне помочь?

tia & & с уважением
noircc

8
задан noircc
15.05.2023 8:44 Количество просмотров материала 2361
Распечатать страницу

2 ответа

set -e # Exit немедленно, если команда завершает работу с ненулевым статусом.

параметр-d в тесте if имеет значение true, если путь является каталогом. ! отрицает тест.

    if ! [ -d /var/cache/man ]  # true if /var/cache/man is not a directory
    if [ -x /usr/bin/mandb ]    # true if /usr/bin/mandb is executable

о chown man:root /var/cache/man || true - код справа от | / активируется, если предыдущая команда chown возвращает ненулевое состояние выхода. При сбое команды chown вычисляется значение true. Это делается для предотвращения сбоя сценария-в противном случае chown ненулевое состояние ошибки будет выйти из скрипт из-за set-e.

2
отвечен suspectus 2023-05-16 16:32

в bash -d переключатель "проверить, если каталог существует." и -x для проверки файлов. Set -e указывает сценарию завершить работу в случае сбоя какой-либо команды (i.e, выход с ненулевым статусом).

|| true предотвращает ненулевой ответ от chown (если команда не выполняется).

3
отвечен Nathan C 2023-05-16 18:49

Постоянная ссылка на данную страницу: [ Скопировать ссылку | Сгенерировать QR-код ]

Ваш ответ

Опубликуйте как Гость или авторизуйтесь

Имя
Вверх