我想创建一个可以获取 bash 代码块的 bash 函数,如下time
所示:
time {
echo 123
echo "Something else"
sleep 1
}
基本上,我希望能够用我的 bash 代码包装该块。
编辑:在 @DavidPostill♦ 的第一个回答和评论之后更新了我的问题:例如,我想用 2>&1 > /dev/null 包装一个代码块,并用 包装时间time
。我应该在 bash 之外编写一个程序来执行此操作吗?
function myfunction() {
time { $1 } 2>&1 /dev/null
}
myfunction { sleep 1 }
编辑2:进一步阅读后,似乎这是不可能的,因为这time
是 bash 的一个特例。
答案1
您不能直接将块作为对象传递,但您可以传递重定向块 ( ) 的文件描述符 (FD)<()
并计算其输出时间(或对其进行任何操作)。{} 2>&1
需要使用 inner 来捕获同一 FD 上的 stderr:
function myfunction() {
time cat $1 >/dev/null
}
myfunction <({
echo 123
echo "Something else"
sleep 1
} 2>&1)
答案2
我希望能够用我的 bash 代码包装该函数并传递参数
带参数的函数示例
#!/bin/bash function quit { exit } function e { echo $1 } e Hello e World quit echo foo
该函数
e
打印它收到的第一个参数。函数内的参数的处理方式与传递给脚本的参数的处理方式相同。