tee -a:没有这样的文件或目录

时间:2017-02-07 06:51:31

标签: bash tee

请查看以下代码。

#!/bin/sh
LOG_FILE=/home/admin/scriptLogs.log
rm -f ${LOG_FILE}
echo "`date`:: Script Execution Started" | tee -a ${LOG_FILE}
DATABASE ACCESS CODE 2>&1
echo "`date`:: Script Execution Successful " | tee -a {$LOG_FILE}
exit 0

它产生以下输出:

> Tue Feb  7 12:14:49 IST 2017:: Script Execution Started 
> tee:{/home/admin/scriptLogs.log}: No such file or directory 
> Tue Feb  7 12:14:49 IST 2017:: Script Execution Successfull

但是,该文件存在于指定位置。它还会附加除最后一个echo语句之外的数据。为什么会这样?

2 个答案:

答案 0 :(得分:1)

确保在展开变量之前始终引用变量以避免重新解释(请在此处阅读:http://www.tldp.org/LDP/abs/html/quotingvar.html) 此外,您应该将LOG_FILE定义为字符串(请注意下面的引号):

LOG_FILE="/home/admin/scriptLogs.log"

话虽如此,你在@codeforester

中提到的脚本中有一个拼写错误

此外,您打印执行成功,而不检查它确实是。

所以你的代码应该是这样的:

    #!/bin/sh
    LOG_FILE="/home/admin/scriptLogs.log"
    rm -f "$LOG_FILE"
    echo "`date`:: Script Execution Started" | tee -a "$LOG_FILE"
    DATABASE ACCESS CODE 2>&1
    if [ $? -eq 0 ]; then
      echo "`date`:: Script Execution Successful " | tee -a "$LOG_FILE"
    else
      ...
    exit 0

注意:我已经删除了大括号,因为这里不需要它们(虽然这样做不是错误的)

答案 1 :(得分:0)

正如@codeforester所指出的那样,使用:

#!/bin/sh
LOG_FILE=/home/admin/scriptLogs.log
rm -f ${LOG_FILE}
echo "`date`:: Script Execution Started" | tee -a ${LOG_FILE}
DATABASE ACCESS CODE 2>&1
echo "`date`:: Script Execution Successful " | tee -a ${LOG_FILE}
exit 0