为什么结束时间与此shell脚本中的开始时间相同?

时间:2016-01-29 10:23:40

标签: linux bash shell

我的shell脚本:

$ cat sh1.sh
#!/bin/bash
STAT=$(adb get-state)
DATE=$(date "+%Y-%m-%d_%H.%M.%S")
LOG_FILE_PREFIX="log"

LOGFILE="${LOG_FILE_PREFIX}_${DATE}.log"

run ()
{
    #echo Start at $(date)>$LOGFILE
    echo Start at $(date)

    adb logcat -v time -b main -b system >>$LOGFILE

#   echo End at $(date)>>$LOGFILE
}

#trap "echo End at $(date)>>$LOGFILE" INT TERM EXIT
#trap "echo End at $(date)>>$LOGFILE" INT
trap "echo End at $(date)" INT QUIT EXIT TERM

if [ $STAT != "device" ]; then
    echo "please connect to your phone using usb wire and re-run this script file!"
    exit
else
    run
fi

结果:

$ ./sh1.sh
Start at 2016年 1月29日 星期五 18时21分22秒 CST
^CEnd at 2016年 1月29日 星期五 18时21分22秒 CST
End at 2016年 1月29日 星期五 18时21分22秒 CST

我想通过陷阱INT获得结束时间,但错了,为什么?

1 个答案:

答案 0 :(得分:4)

您应该单引用trap命令,以便仅在子shell和变量执行时扩展它们。

trap 'echo End at $(date)' INT QUIT EXIT TERM

使用双引号时,日期将在设置陷阱时进行插值,而不是在其中的代码执行时进行插值。