ksh中陷阱中的多个动作

时间:2015-10-13 20:56:39

标签: debugging ksh shell-trap

Group Growth Black 10% Black -1% Blue 0% Blue 5% Blue 5% Red 2% Green 2% Green 9% 之后,我希望在k-shell历史列表中同时拥有用户名和时间戳。我有命令行:

sudo su -

使用此命令,我希望如下:

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,并忽略或覆盖第一个动作。

如何在历史列表中包含用户名和时间戳?

注意到需要用户名的原因是多个用户对同一服务用户具有相同的模拟权。

3 个答案:

答案 0 :(得分:1)

我找到了一个简单的解决方案:

  1. 使用一行在服务用户的主目录中创建 trapme 文件:

    我是谁? cut -d“” - f1 | tr“\ n”“”&&日期

  2. 在.profile中添加一行:

    陷阱'〜/ trapme | read -s'debug

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

答案 1 :(得分:0)

这对我有用:

$ 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

答案 2 :(得分:0)

将要传递给其的输出的所有命令放到read组中:

trap '{ who am i|cut -d" " -f1 |tr "\n" " "; date; }|read -s' DEBUG