相关疑难解决方法(0)

我怎样才能给管道计时?

我想要time一个命令,它由两个单独的命令组成,一个管道输出到另一个。例如,考虑以下两个脚本:

$ cat foo.sh
#!/bin/sh
sleep 4

$ cat bar.sh
#!/bin/sh
sleep 2
Run Code Online (Sandbox Code Playgroud)

现在,我怎样才能time报告所花费的时间foo.sh | bar.sh(是的,我知道管道在这里没有意义,但这只是一个例子)?如果我在没有管道的子shell中按顺序运行它们,它确实按预期工作:

$ time ( foo.sh; bar.sh )

real    0m6.020s
user    0m0.010s
sys     0m0.003s
Run Code Online (Sandbox Code Playgroud)

但是我在管道时无法让它工作:

$ time ( foo.sh | bar.sh )

real    0m4.009s
user    0m0.007s
sys     0m0.003s

$ time ( { foo.sh | bar.sh; } )

real    0m4.008s
user    0m0.007s
sys     0m0.000s

$ time sh -c "foo.sh | bar.sh "

real    0m4.006s
user    0m0.000s
sys     0m0.000s
Run Code Online (Sandbox Code Playgroud)

我已经阅读了一个类似的问题(How to …

shell bash pipe time

32
推荐指数
2
解决办法
2万
查看次数

命令“时间”独立工作但不在管道中

考虑以下:

# time sleep 1

real    0m1.001s
user    0m0.001s
sys     0m0.000s
# echo foo | time sleep 1
bash: time: command not found
Run Code Online (Sandbox Code Playgroud)

嗯……嗯?

好的,很明显,当作为管道运行时,Bash 正在以某种不同的方式搜索命令。谁能向我解释一下有什么区别?管道是否禁用外壳内置程序或其他东西?(我不认为它有......但是......我看不出这是怎么回事。)

bash pipe time

11
推荐指数
1
解决办法
838
查看次数

标签 统计

bash ×2

pipe ×2

time ×2

shell ×1