考虑以下:
# 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 正在以某种不同的方式搜索命令。谁能向我解释一下有什么区别?管道是否禁用外壳内置程序或其他东西?(我不认为它有......但是......我看不出这是怎么回事。)
Kus*_*nda 20
该bash
外壳工具time
作为关键字。关键字是管道语法的一部分。
管道输入的语法bash
是(来自手册中标题为“管道”的部分bash
):
Run Code Online (Sandbox Code Playgroud)[time [-p]] [!] command1 [ | or |& command2 ] …
由于time
是pipelines 语法的一部分,而不是 shell 内置实用程序,因此它不作为实用程序运行。例如,如果没有额外的技巧,就不可能使用普通的 shell 重定向来重定向其输出(参见例如如何将 `time` 输出和命令输出重定向到同一个管道?)。
当这个词time
出现在bash
shell管道开始之外的任何其他地方时,将调用具有相同名称的外部命令。例如,当您time
在管道符号之后放置时,就会发生这种情况。如果 shell 找不到外部time
命令,则会生成“未找到命令”错误。
要使 shell 使用关键字只对sleep 1
管道中的命令计时,您可以使用
echo foo | (time sleep 1)
Run Code Online (Sandbox Code Playgroud)
在管道右侧的子 shell 中,time
关键字位于管道的开头(单个简单命令的管道,但仍然如此)。
还相关:
归档时间: |
|
查看次数: |
838 次 |
最近记录: |