ksh 陷阱中的多个动作
Multiple actions in trap in ksh
在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
,并忽略或覆盖第一个操作。
如何在历史列表中获得用户名和时间戳?
注意到之所以需要用户名是因为多个用户对同一服务用户具有相同的模拟权限
这对我有用:
$ 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
等等
我找到了一个简单的解决方案:
在服务用户的主目录下创建文件trapme一行:
我是谁 | cut -d" " -f1 |tr "\n" " " && 日期
在.profile中添加一行:
陷阱'~/trapme |读取-s' debug
这将在包含真实用户登录名和时间戳的命令后创建一行。
将您要将其输出传递给 read
的所有命令放入一个组中:
trap '{ who am i|cut -d" " -f1 |tr "\n" " "; date; }|read -s' DEBUG
在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
,并忽略或覆盖第一个操作。
如何在历史列表中获得用户名和时间戳?
注意到之所以需要用户名是因为多个用户对同一服务用户具有相同的模拟权限
这对我有用:
$ 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
等等
我找到了一个简单的解决方案:
在服务用户的主目录下创建文件trapme一行:
我是谁 | cut -d" " -f1 |tr "\n" " " && 日期
在.profile中添加一行:
陷阱'~/trapme |读取-s' debug
这将在包含真实用户登录名和时间戳的命令后创建一行。
将您要将其输出传递给 read
的所有命令放入一个组中:
trap '{ who am i|cut -d" " -f1 |tr "\n" " "; date; }|read -s' DEBUG