我定义了一个shell函数(我们称它为clock
),我想将其用作另一个命令的包装器,类似于该time
函数,例如clock ls -R
。
我的shell函数执行一些任务,然后以结尾exec "$@"
。
我希望此功能甚至可以与Shell内置程序一起使用,例如clock time ls -R
应该输出time
内置程序的结果,而不是/usr/bin/time
可执行文件的结果。但是exec
总是最终改为运行命令。
如何使Bash函数作为包装程序工作,该包装程序还接受shell内置参数作为参数?
编辑:我刚刚得知这time
不是内置的Bash,而是与管道相关的特殊保留字。我仍然对内置解决方案感兴趣,即使它不能与结合使用time
,但是更通用的解决方案会更好。
exec bash -c \' "$@" \'
。除非第一个参数中的命令被识别为Shell脚本,否则它将被解释为直接运行的二进制文件。另外,更简单地说,就是从原始shell中错过exec
and调用"@"
。