我的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得到结束时间,但错误,为什么?
你应该单引号的trap
命令,以扩大subhells和变量只有当它将被执行。
trap 'echo End at $(date)' INT QUIT EXIT TERM
使用双引号,设置陷阱时会插入日期,而不是执行其中的代码。