如何将时间函数的输出重定向到变量

时间:2016-04-28 10:12:06

标签: unix time solaris ksh

我有以下问题,我需要您的帮助才能解决。 我有一个函数让我们调用它"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上运行脚本。

2 个答案:

答案 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