2013-03-18 174 views
1

我有一个预定的unix脚本,我想记录输出。由于用户界面限制,我无法编辑cron文件,并且我无法将>> logfile添加到该命令。有什么我可以添加脚本本身发送输出到日志?输出shell脚本到日志文件

在脚本的起点
{ 

printf poo 

#Do not change 
PRINTF=/usr/bin/printf 
MSMTP=/usr/local/bin/msmtp 
MSMTPCONF=/var/etc/msmtp.conf 

#Can be changed 
FROM="[email protected]" 
TO="[email protected]" 
MDIR="CaseData" 
SUBJECT="$MDIR Backup Report" 


} > /mnt/support/logs/$SUBJECT.log 
#BODY="$(cat /mnt/support/logs/test.log)" 
#$PRINTF "From:$FROM\nTo:$TO\nSubject:$SUBJECT\n\n$BODY" | $MSMTP --file=$MSMTPCONF -t 

回答

0

追加以下行

log_file_path="/tmp/output.log" 
log() { while IFS='' read -r line; do echo "$line" >> "$log_file_path"; done; }; 
exec > >(tee >(log)) 2>&1 

你的脚本修改

PRINTF=/usr/bin/printf 
MSMTP=/usr/local/bin/msmtp 
MSMTPCONF=/var/etc/msmtp.conf 
FROM="[email protected]" 
TO="[email protected]" 
MDIR="CaseData" 
SUBJECT="$MDIR Backup Report" 

{ 

printf poo 


} > /mnt/support/logs/$SUBJECT.log 
#BODY="$(cat /mnt/support/logs/test.log)" 
#$PRINTF "From:$FROM\nTo:$TO\nSubject:$SUBJECT\n\n$BODY" | $MSMTP --file=$MSMTPCONF -t 
+0

我真的不明白是什么在做什么。我把它放在脚本的顶部? – 2013-03-18 18:15:23

+0

@DarylPatino在这里找到更好的解释http://stackoverflow.com/questions/3173131/redirect-copy-of-stdout-to-log-file-from-within-bash-script-itself。 – 2013-03-18 18:19:21

+0

谢谢,这是为bash。我需要一些东西。 – 2013-03-18 18:39:13

2

一种方法是来包装你的脚本在括号重定向输出,如下图所示:

#!/bin/bash 
{ 
# script contents here 
echo running script 
} > logfile 
+0

我试过这个,直到我在日志文件名中添加了一个变量。我已将我的代码添加到问题中。 – 2013-03-18 19:06:26

+1

将“SUBJECT”变量赋值移到大括号外。 – dogbane 2013-03-19 08:14:13

6

尝试

#!/bin/bash 
exec > /tmp/myLog.log 2>&1 
set -x 

日志显示:

+ echo 'Hello World!' 
Hello World! 
相关问题