方便的日期/时间戳控制台交互,例如使用 shell 别名?

方便的日期/时间戳控制台交互,例如使用 shell 别名?

因此,我经常发现,在我发现某个进程(或脚本)花费了很长时间之后,我真的很想知道它是什么时候启动的...这意味着我无法在命令行上预先添加日期(而不会中断我现在知道需要花费很长时间的事情)....然后当我离开终端时,该进程可能会完成。

这让我开始思考 - 是否可以扭曲 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 列显示开始日期/时间。

相关内容