Я написал 2 методы ведения журналов в Баш скрипт, как:Printf Баш странное поведение
# Function to log information
function print_info() {
format="$1"
shift
printf "$(date +'%F %T') ${SCRIPTNAME}: INFO: $format\n" "[email protected]" | tee -a ${LOGFILE};
}
# Function to log error
function print_error() {
format="$1"
shift
printf "$(date +'%F %T') ${SCRIPTNAME}: ERROR: $format\n" "[email protected]" | tee -a ${LOGFILE} >&2;
}
И определено несколько сообщений как:
BACKUP_DIR_INFO="All the contents of directory %s are compressed to %s."
BACKUP_FILE_INFO="File %s is compressed at path %s."
ERROR_FILE_NOT_EXIST="File or directory %s does not exist."
Из моего сценария, я использую 2 выше методов, как показано:
function tarIt() {
FILE_NAME=$1
TAR_FILE_NAME=$2
if ! ([ -f $FILE_NAME ] || [ -d $FILE_NAME ]);
then
print_error $ERROR_FILE_NOT_EXIST $FILE_NAME
else
if [[ -f $FILE_NAME ]]
then
print_info "$BACKUP_FILE_INFO" "$FILE_NAME" "$BACKUP_DIR"
else
print_info "$BACKUP_DIR_INFO" "$FILE_NAME" "$TAR_FILE_NAME"
fi
fi
}
я назвал функцию tarIt
дважды с 2-мя именами файлов, из одного существовать d другой не существует, но получает выход, как показано ниже:
2015-03-15 09:42:46 : ERROR: File
2015-03-15 09:42:46 : INFO: All the contents of directory /opt/mgtservices/relay/logs are compressed to /root/backup/relay_logs.tar.gz.
Строка с ошибкой не печатается полностью.
Не получить причину. Даже я пытался использовать метод print_error для других сообщений, но только первое слово строки, которое он печатает. Позже она игнорируется.
Укажите свои переменные! 'print_error $ ERROR_FILE_NOT_EXIST $ FILE_NAME' →' print_error "$ ERROR_FILE_NOT_EXIST" "$ FILE_NAME" и т. д. Могу ли я рекомендовать использовать http://www.shellcheck.net? – Biffen