你可以很容易地做到这一点,但这是一个 3 步的过程。首先,您必须设置 bash 以执行precmd
. 复制这个问题,从这里你应该做:
第一步- 将下一个保存到任何文件中,例如makelastcomm.sh
set -o functrace > /dev/null 2>&1
shopt -s extdebug > /dev/null 2>&1
preexec () {
temp=$(tty); echo "$1" >/tmp/lastcommand.${temp:5}
}
preexec_invoke_exec () {
[ -n "$COMP_LINE" ] && return # do nothing if completing
local this_command=`history 1 | sed -e "s/^[ ]*[0-9]*[ ]*//g"`;
preexec "$this_command"
}
trap 'preexec_invoke_exec' DEBUG
第二步- 将其源到当前的 bash
source makelastcomm.sh
第三步- 你的脚本应该开始(在我的例子中它被称为hhhqst
)
#!/bin/bash
temp=$(tty)
cat << EOF
---------------------------
SYSTEM TESTING FILE for BEPO
TIMESTAMP $( date +"%Y%m%d%H%M" )
PWD: $( pwd )
COMMAND: $(cat /tmp/lastcommand.${temp:5})
---------------------------
EOF
#your main script here
echo "running the the main script for example the date command"
LC_ALL=C date
结果。hhhqst
什么时候运行
bash hhhqst
会得到
---------------------------
SYSTEM TESTING FILE for BEPO
TIMESTAMP 201305041939
PWD: /Users/jm/tmp
COMMAND: bash hhhqst
---------------------------
running the the main script for example the date command
Sat May 4 19:39:13 CEST 2013
何时将使用重定向运行,例如
./hhhqst >/tmp/hhh.out
将/tmp/hhh.out
包含
---------------------------
SYSTEM TESTING FILE for BEPO
TIMESTAMP 201305041940
PWD: /Users/jm/tmp
COMMAND: ./hhhqst >/tmp/hhh.out
---------------------------
running the the main script for example the date command
Sat May 4 19:40:39 CEST 2013
完毕。
原则。挂钩 bash 调试陷阱,我们将其放入/tmp/lastcomm.your_terminal
历史记录的最后一个命令中。因此,当您运行脚本时,脚本只会从上述文件中读取内容。