如何使用 bash shell 将成功的命令附加到文件?

如何使用 bash shell 将成功的命令附加到文件?

可能有一种更简单的方法可以做到这一点,我将在一个盒子上运行一堆命令。我想跟踪成功的命令,以便我可以用它来编写脚本,以便在将来自动执行此操作。

我试过

<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

相关内容