我的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获得结束时间,但错了,为什么?
答案 0 :(得分:4)
您应该单引用trap
命令,以便仅在子shell和变量执行时扩展它们。
trap 'echo End at $(date)' INT QUIT EXIT TERM
使用双引号时,日期将在设置陷阱时进行插值,而不是在其中的代码执行时进行插值。