我正在开发一些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函数来使用logger并在当前脚本的文件夹中写入文件?
答案 0 :(得分:3)
如果对变量LOG_FILE使用绝对路径,那该怎么办。
每次更改目录时,您都在改变编写的位置。
编辑: 你可以创建这样的变量,如果你想要执行脚本的目录中的日志文件:
LOG_FILE="`pwd`/creation.log"
答案 1 :(得分: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
时会发生什么?这表明发生了什么吗?