这样做可能会更简单,我将在一个盒子上运行一堆命令。 我想跟踪成功的,以便我可以从中创build一个脚本来自动化。
我试过了
<command> && echo "!!" >> file
但!! 在这之前打印行。 我已经尝试了一些其他的东西,但不能得到的东西工作
你可以这样做:
PROMPT_COMMAND='[[ $? == 0 ]] && history 1 | sed -r "s/\ +[0-9]+\ +//" >> successful'
$ PROMPT_COMMAND包含一个在发出提示之前bash执行的命令。 那么这样做是评估你以前的命令的退出状态( 在你按下enter键执行当前的命令之后,但在 bash评估之前 ),如果它成功了,从你的bash历史logging中取出它,去掉命令号,把它添加到一个单独的文件。
现在你不需要对你的命令做任何修改:
echo "exits successfully and will be appended" ehco "only ends up in bash history"
请注意,readline历史命令! 和其他家庭,只能在交互式shell中工作,不能在脚本中使用。
还要注意,-r选项是gnu sed,bsd sed没有它。
我会用第二个壳和strace。 在shell 1中,使用echo $$来查找你的shell的PID。 然后使用strace -f -q -eexecve,exit_group -p that_pid_here跟踪命令并退出状态。 之后,输出的结果可以被改写成一个shellcript。
这将做 – 注意它是“而不是”
<command> && echo '!!' >> file