![如何使用 bash shell 将成功的命令附加到文件?](https://linux22.com/image/797741/%E5%A6%82%E4%BD%95%E4%BD%BF%E7%94%A8%20bash%20shell%20%E5%B0%86%E6%88%90%E5%8A%9F%E7%9A%84%E5%91%BD%E4%BB%A4%E9%99%84%E5%8A%A0%E5%88%B0%E6%96%87%E4%BB%B6%EF%BC%9F.png)
可能有一种更简单的方法可以做到这一点,我将在一个盒子上运行一堆命令。我想跟踪成功的命令,以便我可以用它来编写脚本,以便在将来自动执行此操作。
我试过
<command> && echo "!!" >> file
但!!
打印的是这一行之前的行。我尝试了其他一些方法,但都无法正常工作
答案1
你可以这样做:
PROMPT_COMMAND='[[ $? == 0 ]] && history 1 | sed -r "s/\ +[0-9]+\ +//" >> successful'
$PROMPT_COMMAND 保存 bash 在发出提示之前执行的命令。因此,它的作用是评估你的以前的命令 (后你按下回车键来执行当前命令,但是前bash 会对其进行评估),如果成功,则将其从 bash 历史记录中拉出,删除命令编号,然后将其添加到单独的文件中。
现在您不需要在命令中添加任何内容:
echo "exits successfully and will be appended"
ehco "only ends up in bash history"
请注意,readline 历史命令 !! 及其其余家族命令仅在交互式 shell 中起作用,不能在脚本中使用它们。
还要注意,-r 选项是 gnu sed,bsd sed 没有它。
答案2
我会使用第二个 shell 和 strace。在 shell 1 中,使用echo $$
查找 shell 的 PID。然后使用strace -f -q -eexecve,exit_group -p that_pid_here
跟踪命令和退出状态。随后可以将结果输出整理成 shell 脚本。
答案3
这样做就可以了 -注意是 ' 而不是 "
<command> && echo '!!' >> file