Encontrei um script no meu cron.monthly, estou querendo saber o que está fazendo?

3

Eu sou novo em bash-programming, desculpe se isso pode ser um tipo de pergunta estúpida. Eu encontrei um script no meu servidor e estou tentando entender cada linha:

#!/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

Algumas coisas que não entendo como

set -e

Eu li sobre isso, que "verifica" seus comandos. Por isso, dá avisos ou uma exceção se algo der errado? Ou um relatório de erros mais detalhado?

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

O que eu não entendo são os comandos "-d" ou "-x" na cláusula if, há algo faltando aqui.

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

Eu não entendo a última parte, qual é a razão para isso "OR TRUE".

Talvez alguém possa me ajudar?

tia & & Saudações   noircc

    
por noircc 22.05.2013 / 12:55

2 respostas

2

set -e # Sai imediatamente se um comando sair com um status diferente de zero.

A opção -d no teste if é verdadeira se o caminho é um diretório. ! nega o teste.

    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

Em relação a chown man:root /var/cache/man || true - o código à direita do || é acionado se o comando chown anterior retornar um status de saída diferente de zero. Se o comando chown falhar, true será avaliado. Isso evita que o script falhe - caso contrário, o status de erro diferente de zero do chown sairia do script devido ao set -e.

    
por 22.05.2013 / 13:23
3

No bash, a opção -d é "verificar se o diretório existe" e -x é para verificar arquivos. Set -e diz ao script para sair se algum comando falhar (por exemplo, sair com um status diferente de zero).

O || true impede uma resposta diferente de zero do chown (se o comando falhar).

    
por 22.05.2013 / 13:23