2

之后sudo su -,我想在 k-shell 历史列表中同时拥有用户名和时间戳。我有命令行:

trap 'who am i|cut -d" " -f1 |tr "\n" " " && date|read -s' debug

使用此命令,我期望类似:

UserName Tue Oct 13 15:37:06 CDT 2015 在历史列表中。然而它只显示Tue Oct 13 15:37:06 CDT 2015

这似乎只执行第二个动作date,并忽略或覆盖第一个动作。

我怎样才能在历史列表中拥有用户名和时间戳?

请注意,之所以需要用户名,是因为多个用户对同一个服务用户具有相同的模拟权限。

4

3 回答 3

1

我想出了一个简单的解决方案:

  1. 服务用户的主目录中创建一个文件trapme,其中一行:

    我是谁 | 剪切 -d" " -f1 |tr "\n" " " && 日期

  2. 在 .profile 中添加一行:

    陷阱'~/trapme | 读取 -s' 调试

这将在带有真实用户登录名和时间戳的命令之后创建一行。

于 2015-10-13T22:49:46.110 回答
1

这对我有用:

$ trap 'echo this; echo that' INT
$ sleep 10
^Cthis
that
$ 

如果您需要复杂的命令,通常的方法是使用ksh -c 'compound | pipe | command',但引用可能会变得非常棘手。

(至少在 bash 中,子 shell 能够调用父 shell 的函数,因此您可以按照评论者的建议定义一个函数。未使用 进行测试ksh)。

更新

这对我有用:

trap 'echo $(whoami|cut -d" " -f1 |tr "\n" " " && date)' INT

考虑做

trap 'echo "$(id -un) $(date)"' INT

甚至

trap 'date "+$(id -un) %DT%T"' INT

等等。

于 2015-10-13T21:03:41.940 回答
0

将要传递其输出的所有命令read放入一个组中:

trap '{ who am i|cut -d" " -f1 |tr "\n" " "; date; }|read -s' DEBUG
于 2015-11-22T00:20:25.287 回答