1

我正在开发几个 shell 脚本并想添加一个简单的日志记录方法。但到目前为止,创建的函数只打印第一条日志行。我头疼得厉害,因为我不明白问题出在哪里

日志功能很容易开发和理解:

LOG_FILE="creation.log"

logit() 
{
    echo "[${USER}][`date`] - ${*}" >> ${LOG_FILE}
}

还有一些剧本。

    LOG_FILE="creation.log"

logit() 
{
    echo "[${USER}][`date`] - ${*}" >> ${LOG_FILE}
}

repImport()
{
    # création des repertoires pour les répertoires d'export.
    mkdir -p acharger
    mkdir -p archives

    logit "repImport correctement crée."
}

repExport()
{
    # création des repertoires pour les répertoires d'import.
    mkdir -p archives
    mkdir -p atraiter

    logit "repExport correctement crée."
}

array=(BNP_CB collection_XTL collection_QT sp xcl xtl pgi qnt visualr)

logit "Array généré"

REP_TEST="/tmp/jorge/modules"
REP=${REP_TEST}        # Descomentar para hacer test.

REP_LIV_VX="/tmp/jorge/modules/"


# NOTE IMPORTANTE
#------------------
# Obligatoire créer avec l'user root le répertoire /home/pepsicash, après changer le propietaire pour cash --> root /> chown cash.mersi pepsicash/


# deuxième partir (répertoires pour les fichiers)
#----------------------------------------------------
echo "Création des répertoires pour les fichiers"
mkdir -p "${REP}""/journaux"    # originel: /home/pepsicash/journaux
mkdir -p "${REP}""/data"        # originel: /home/pepsicash/data

cd $REP/data            # originel: /home/pepsicash/data    
mkdir -p imports
mkdir -p exports
mkdir -p tmpcft

logit "Création des répertoires sur Exports"
cd exports
repExport
cd ..

logit "Création des répertoires sur Imports"
cd imports

for index in ${!array[*]}
do

    if [ $index -eq 0 ]; 
    then
        if [ -d ${array[$index]} ]; then
            logit "El répertoire ENCAISSEMENTS existe déjà."
        else
            logit "Le répertoire n'existe pas."
            mkdir -p ENCAISSEMENTS
            logit "Répertoire ENCAISSEMENTS crée correctement."
        fi

        cd ENCAISSEMENTS
        repImport
        logit "Répertoire ENCAISSEMENTS crée, CP -> BNP_CB "
        cd ..

        if [ -d ${array[$index]} ]; then
            logit "El répertoire IMPAYES existe déjà."
        else
            logit "Le répertoire n'existe pas."
            mkdir -p IMPAYES
            logit "Répertoire IMPAYES crée correctement."
        fi

        cd IMPAYES
        repImport
        logit "Répertoire ENCAISSEMENTS crée, CP -> BNP_CB "
        cd ..

        logit "Case particulier BNP_CB crée."

        continue
    fi

    if [ -d ${array[$index]} ]; then
        # Control will enter here if $DIRECTORY exists.
        logit "El répertoire existe déjà."
    else
        logit "Le répertoire n'existe pas."
        mkdir -p ${array[$index]}
        logit "Répertoire ${array[$index]} crée correctement."
    fi

    cd ${array[$index]}

    repImport
    cd ..
done

echo "Fin création des répertoires."

日志文件仅包含第一个logit调用。为什么对该方法的其他调用不起作用?

[JV07483S][Fri Aug 16 18:19:04 CEST 2013] - Array généré
[JV07483S][Fri Aug 16 18:19:30 CEST 2013] - Array généré

在网上搜索我看到我可以使用 logger 命令,但它总是写在/var/ folder. 是否可以调整我的 shell 函数以使用记录器并在当前脚本的文件夹中写入文件?

4

2 回答 2

3

如果您对变量 LOG_FILE 使用绝对路由会怎样。

每次更改目录时,您都在更改写入的位置。

编辑:你可以像这样创建变量,如果你想要在你正在执行脚本的目录中的日志文件:

LOG_FILE="`pwd`/creation.log"
于 2013-08-18T11:22:43.723 回答
1

当我运行您的代码几次时,我会得到以下输出creation.log

[jleffler][Fri Aug 16 13:53:56 PDT 2013] - Array généré
[jleffler][Fri Aug 16 13:53:56 PDT 2013] - Le répertoire n'existe pas.
[jleffler][Fri Aug 16 13:53:56 PDT 2013] - Répertoire ENCAISSEMENTS crée correctement.
[jleffler][Fri Aug 16 13:54:37 PDT 2013] - Array généré
[jleffler][Fri Aug 16 13:54:37 PDT 2013] - Le répertoire n'existe pas.
[jleffler][Fri Aug 16 13:54:37 PDT 2013] - Répertoire ENCAISSEMENTS crée correctement.
[jleffler][Fri Aug 16 13:54:44 PDT 2013] - Array généré
[jleffler][Fri Aug 16 13:54:44 PDT 2013] - Le répertoire n'existe pas.
[jleffler][Fri Aug 16 13:54:44 PDT 2013] - Répertoire ENCAISSEMENTS crée correctement.
[jleffler][Fri Aug 16 13:54:58 PDT 2013] - Array généré
[jleffler][Fri Aug 16 13:54:58 PDT 2013] - El répertoire ENCAISSEMENTS existe déjà.

对于最后一次运行,我在mkdir BNP_CB再次运行命令之前运行。我稍微作弊,安排cat $LOG_FILE在剧本内:

#!/bin/bash

LOG_FILE="creation.log"

logit() 
{
    echo "[${USER}][`date`] - ${*}" >> ${LOG_FILE}
}

array=(BNP_CB cashcollection_EXTELIA cashcollection_QENAT espace excel extelia pgi qenat visualr)

logit "Array généré"

for index in ${!array[*]}
do
    if [ $index -eq 0 ];
    then
        if [ -d ${array[$index]} ]; then
            logit "El répertoire ENCAISSEMENTS existe déjà."
        else
            logit "Le répertoire n'existe pas."
            mkdir -p ENCAISSEMENTS
            logit "Répertoire ENCAISSEMENTS crée correctement."
        fi
    fi
done

cat $LOG_FILE

你有一些问题需要解决,为什么在只处理索引 0 时列出数组中的所有项目,以及为什么在 BNP_CB 不存在时创建 ENCAISSEMENTS 等等,但这些问题与日志记录无关工作(因为它对我有用)或不工作(因为它不适合你)。

当你跑步时会发生什么bash -x yourscript.sh?这是否表明正在发生的事情?

于 2013-08-16T20:59:37.240 回答