因此,我经常发现,在我发现某个进程(或脚本)花费了很长时间之后,我真的很想知道它是什么时候启动的...这意味着我无法在命令行上预先添加日期(而不会中断我现在知道需要花费很长时间的事情)....然后当我离开终端时,该进程可能会完成。
这让我开始思考 - 是否可以扭曲 shell 别名,以便默认情况下在每个命令行输入之前和之后调用“日期”?有时能够在终端中向后滚动并了解事情花费了多长时间会非常有用。
其他人有巧妙的方法来解决这个问题吗?我相信这是一个很常见的情况。
就采用这种方法的解决方案而言,我猜测它与这个问题有点相关。 使用初始命令运行交互式 bash 子 shell,而不立即返回(“超级”)shell
显然,您可以预先添加命令。但这只是解决方案的一部分。也许预先添加然后让 shell 提示显示当前时间是一个相当巧妙的解决方案?
有什么想法吗?
答案1
您可以简单地修改 shell 提示符PS1
变量以显示当前时间戳。可以使用以下方法之一:
\t the current time in 24-hour HH:MM:SS format
\T the current time in 12-hour HH:MM:SS format
\@ the current time in 12-hour am/pm format
\A the current time in 24-hour HH:MM format
您可以在中找到这些以及其他选项man bash
。编辑您的.bashrc
文件以PS1
根据需要进行修改。
然后,您就可以确定任何命令的执行时间。当然,如果您在按下回车键之前长时间处于闲置状态,那么您将无法获得准确的时间。
编辑:另一种可能性是使用ts
实用程序来显示脚本的进展情况。执行脚本如下:
$ /path/to/script | ts
每个 echo 语句将显示一个时间戳。
答案2
笔记:这不是对 OP 问题的直接回答,但也许有助于解决其问题。
对于已启动的进程,您可以通过发出简单的 来检索开始日期/时间ps ax -F
。它将显示类似以下内容的输出:
apache 1733 1678 0 83467 7752 0 10:07 ? S 0:00 /usr/sbin/httpd apache 1734 1678 0 83467 7752 0 10:07 ? S 0:00 /usr/sbin/httpd apache 1735 1678 0 83467 7752 0 10:07 ? S 0:00 /usr/sbin/httpd apache 1736 1678 0 83467 7768 0 10:07 ? S 0:00 /usr/sbin/httpd apache 1737 1678 0 83467 7752 0 10:07 ? S 0:00 /usr/sbin/httpd apache 1738 1678 0 83467 7752 0 10:07 ? S 0:00 /usr/sbin/httpd
如您所见,第 8 列显示开始日期/时间。