我有以下问题,我需要您的帮助才能解决。
我有一个函数让我们调用它"fun"
,我想要计算函数需要运行多长时间,所以我在脚本中添加了这一行:
time fun;
所以这样,它还会打印运行所需的时间。要点是我想将time
的输出重定向到一个变量中,所以我可以在我认为合适时稍后操作它。我失败了尝试:
TIME=`time fun`
time fun | tail -3
etc..
有谁知道如何做到这一点,例如,期望的结果将是:
somehow add the time output in TIME variable.
所以,如果我愿意echo $TIME
我会得到这样的结果,
real 0m0.45s
user 0m0.35s
sys 0m0.00s
感谢您的时间!!
P.S。
我在oracle solaris系统上的ksh上运行脚本。
答案 0 :(得分:1)
您可以使用How can I redirect the output of 'time' to a variable or file?描述的内容:
# Notify system of change via WM_SETTINGCHANGE
if (! ("Win32.NativeMethods" -as [Type]))
{
Add-Type -Namespace Win32 -Name NativeMethods -MemberDefinition @"
[DllImport("user32.dll", SetLastError = true, CharSet = CharSet.Auto)]
public static extern IntPtr SendMessageTimeout( IntPtr hWnd, uint Msg, UIntPtr wParam, string lParam, uint fuFlags, uint uTimeout, out UIntPtr lpdwResult);
"@
}
$HWND_BROADCAST = [IntPtr] 0xffff; $WM_SETTINGCHANGE = 0x1a; $result = [UIntPtr]::Zero
[Win32.Nativemethods]::SendMessageTimeout($HWND_BROADCAST, $WM_SETTINGCHANGE, [UIntPtr]::Zero, "Environment", 2, 5000, [ref] $result) | out-null
}
这里我们将stdout重定向到your_time=$( { time fun ; } 2>&1 >/dev/null)
,以便我们摆脱它并获得stderr。这是一个特例:
/dev/null
我们将foo=$( { time ls; } 2>&1 ) # More efficient version.
两个文件:一个存在(ls
),另一个不存在(myfile
)。
asdfjasdkfl
答案 1 :(得分:0)
命令:
variable=$(time fun)
示例:
var=$(time ls -l) ## or var="$(time ( ls -l ) 2>&1 >/dev/null )"
echo "$var"
输出:
##displays output of ls command and the time taken
real 0m0.003s
user 0m0.001s
sys 0m0.001s
替代方法:
直接在脚本的执行语句中使用time
。
示例:time ./fun